char *PerlScriptName[]={"rec_sum.pl","count.pl","p\ rocess_list.pl","make_license.pl","CCsed.script","\ msa2bootstrap.pl","t_coffee_dpa","t_coffee_dpa2","\ tc_generic_method.pl","generic_method.tc_method","\ clustalw_method.tc_method","extract_from_pdb","ins\ tall.pl","clean_cache.pl","mocca","dalilite.pl","w\ ublast.pl","blastpgp.pl","RNAplfold2tclib.pl","fas\ ta_seq2RNAplfold_templatefile.pl","fasta_seq2hmmto\ p_fasta.pl","fasta_seq2consan_aln.pl","clustalw_al\ n2fasta_aln.pl","msf_aln2fasta_aln.pl","blast_aln2\ fasta_aln.pl","blast_xml2fasta_aln.pl","fasta_aln2\ fasta_aln_unique_name.pl","newick2name_list.pl","e\ xcel2fasta.pl","any_file2unix_file.pl","EndList"};\ char *PerlScriptFile[]={"use File::Copy;\nuse Env \ qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n$\ x_field=0;\n$y_field=1;\n$interval=0;\n$file=\"std\ in\";\n$print_avg=1;\n$print_sd=0;\n$print_sum=0;\\ n$print_n=0;\nforeach $value ( @ARGV)\n {\n if \ ($value ne $ARGV[$np]) \n {\n ;\n }\n \ elsif($value eq \"-print_all\")\n {\n $pri\ nt_sd=$print_avg=$print_n=$print_sum=1;\n $np+\ +;\n }\n elsif($value eq \"-print_sum\")\n \ {\n $print_sum=1;\n $print_avg=0;\n $\ np++;\n }\n elsif($value eq \"-print_n\")\n \ {\n $print_n=1;\n $print_avg=0;\n $n\ p++;\n }\n elsif($value eq \"-print_avg\")\n \ {\n $print_avg=1;\n $print_avg=0;\n \ $np++;\n }\n elsif($value eq \"-sd\")\n {\ \n $print_sd=1;\n $print_avg=0;\n $np+\ +;\n }\n elsif($value eq \"-h\")\n {\n \ $header=1;\n $np++;\n }\n elsif ($value e\ q \"-i\")\n {\n $interval= $ARGV[++$np];\n\ $np++;\n }\n elsif ($value eq \"-r\")\ \n {\n $min= $ARGV[++$np];\n $max= $AR\ GV[++$np];\n $np++;\n }\n \n elsif ($v\ alue eq \"-x\")\n {\n $x_field= $ARGV[++$n\ p]-1;\n $np++;\n }\n elsif ($value eq \ \"-y\")\n {\n \n while ($ARGV[$np+1]\ && !($ARGV[$np+1]=~/\\-/))\n {\n $y_field[\ $nyf++]=$ARGV[++$np]-1;\n $y_field_set=1;\n \ }\n\n $np++;\n }\n elsif ($value eq \\ "-file\")\n {\n $file= $ARGV[++$np];\n \ $file_set=1;\n $np++;\n } \n el\ sif ( $value eq \"h\" || $value eq \"-h\" || $val\ ue eq \"-H\" || $value eq \"-help\" || $value eq \\ "help\")\n {\n print STDOUT \"data_analyse: \ Analyse and discretization of data\\n\";\n pri\ nt STDOUT \" -file: ,.\\n\";\n print ST\ DOUT \" -x: ,.......\ ........\\n\";\n print STDOUT \" \ -y: ,...............\\n\";\n print STDOUT \" -i:,...............\\n\";\n p\ rint STDOUT \" -i:<0:only one interval>\\n\"\ ;\n print STDOUT \" -r:\\ \n\";\n print STDOUT \" -sd: print stand\ ard deviation on the Y\";\n print STDOUT \" \ -h : print column header \\n\";\n exit (0\ );\n }\n elsif ($value=~/-/)\n {\n print \\ "$value is not a valid FLAG[FATAL]\\n\";\n exi\ t (0);\n } \n elsif ($list eq \"\") \n {\n \ $file=$ARGV[$np];\n $np++;\n }\n \n \n\ }\n\n\n\n\n\nif ($file eq \"stdin\")\n {\n $\ remove_file=1;\n $file=\"tmp$$\";\n open (F, \">$f\ ile\");\n while ()\n {\n print F $_;\n }\ \n close (F);\n \n ;}\n\n\nopen(F,$file);\n\nif (\ $interval)\n {\n $interval_size=($max-$min)/$i\ nterval;\n }\nwhile ()\n {\n $line=$_;\n \ if (!/\\S/){next;}\n @list=($line=~/(\\S+)/g)\ ;\n \n if ($interval==0){$bin=0;}\n else{\ $bin=int (($list[$x_field]-$min)/($interval_size))\ ;}\n\n \n if ($bin && $bin==$interval){$bin-\ -;}\n for ( $a=0; $a<$nyf; $a++)\n {\n $su\ m{$a}{$bin}+=$list[$y_field[$a]];\n $sum2{$a}{$bin\ }+=$list[$y_field[$a]]*$list[$y_field[$a]];\n $n{$\ a}{$bin}++;\n }\n }\n\nif (!$interval){$inte\ rval=1;}\nfor ( $a=0; $a<$interval; $a++)\n {\n \ printf ( \"%3d %3d \", $interval_size*$a, $inter\ val_size*($a+1));\n for ( $b=0; $b<$nyf; $b++) \ \n {\n $i=$interval*$a;\n if ( $n{$b}{$a}==0)\ \n {\n $avg=0;\n $sd=0;\n }\n else\n \ {\n $avg=$sum{$b}{$a}/$n{$b}{$a};\n $sd=s\ qrt($sum2{$b}{$a}*$n{$b}{$a}-$sum{$b}{$a}*$sum{$b}\ {$a})/($n{$b}{$a}*$n{$b}{$a});\n }\n if ($print_\ n) {printf \"%10.4f \", $n{$b}{$a};}\n if ($print_\ sum){printf \"%10.4f \", $sum{$b}{$a};}\n if ($pri\ nt_avg){printf \"%10.4f \", $avg}\n if ($print_sd)\ {printf \"%10.4f \", $sd;}\n }\n printf (\ \"\\n\");\n }\n\n\nif ( $remove_file){unlink $fil\ e;}\n","use File::Copy;\nuse Env qw(HOST);\nuse En\ v qw(HOME);\nuse Env qw(USER);\n\nforeach $v (@ARG\ V){$cl.=$v;}\n\n\nif ( $cl=~/-k(\\d+)/){$k=$1;}\ne\ lse {$k=1;}\nif ( $cl=~/-w(\\d+)/){$w=$1;}\nelse {\ $w=-1;}\nif ( $cl=~/-p(\\d+)/){$p=$1;}\nelse {$p=-\ 1;}\n\nwhile ()\n {\n @l=($_=~/(\\S+)/g\ );\n $v=$l[$k-1];\n if ( !$h{$v}){@ll=($v, @\ ll);}\n \n if ( $w==-1)\n {$h{$v}++;}\n\ else\n {$h{$v}+=$l[$w-1];}\n\n if ($p!\ =-1){$print{$v}=$l[$p-1];}\n\n }\nforeach $v (@ll\ )\n {\n print \"$v $print{$v} $h{$v}\\n\";\n \ }\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nuse \ Env qw(USER);\n$random_tag=int (rand 10000)+1;\n$u\ nique_prefix=\"$$.$HOST.$random_tag\";\n$queue=\"d\ istillery.and.mid\";\n$monitor=0;\n$stderr_file=\"\ /dev/null\";\n$stdio_file=\"/dev/null\";\n$log_fil\ e=\"/dev/null\";\n$pause_time=0;\n$max_sub_jobs=60\ ;\n$min_sub_jobs=30;\n$output_all=0;\n$var='\\$';\\ n\nforeach $value ( @ARGV)\n {\n if ($value ne \ $ARGV[$np]) \n {\n ;\n }\n elsif ($val\ ue eq \"-max_sub_jobs\")\n {\n $max_sub_jo\ bs= $ARGV[++$np];\n $np++;\n } \n elsi\ f ($value eq \"-min_sub_jobs\" )\n {\n $mi\ n_sub_jobs= $ARGV[++$np];\n $np++;\n }\ \n elsif ($value eq \"-para\")\n {\n $para\ =1;\n $monitor=1;\n $np++;\n }\n e\ lsif ($value eq \"-monitor\") \n {\n $moni\ tor=1;\n $np++;\n }\n elsif ($value eq \"-\ no_monitor\") \n {\n $monitor=0;\n $np\ ++;\n }\n elsif ($value eq \"-queue\")\n {\ \n $queue=$ARGV[++$np];\n $np++;\n } \\ n elsif ($value eq \"-stderr_file\")\n {\n \ $stderr_file=$ARGV[++$np];\n $np++;\n }\n\ elsif ($value eq \"-stdio_file\")\n {\n $\ stdio_file=$ARGV[++$np];\n $np++;\n }\n el\ sif ($value eq \"-output_all\")\n {\n $out\ put_all=1;\n $np++;\n }\n elsif ($value eq\ \"-pause\") \n {\n $pause_time=$ARGV[++$n\ p];\n $np++;\n }\n elsif ($value eq \"-log\ \")\n {\n $log=1;\n \n \ if ($ARGV[$np+1]=~/\\-\\S+/) \n {\n $\ log_file=\"stderr\";\n }\n else \\ n {\n $log_file=$ARGV[++$np]; \n +\ +$np;\n \n }\n }\n elsif ( $valu\ e eq \"-com\")\n {\n \n if (!$ARGV[$np+1]=~/\ ^\\'/) { $com=$ARGV[++$np];}\n else {$com=$ARGV[+\ +$np];}\n\n $np++;\n }\n elsif ( $value e\ q \"-check\")\n {\n \n if (!$ARGV[$np+1]\ =~/^\\'/) { $check=$ARGV[++$np];}\n else {$che\ ck=$ARGV[++$np];}\n $np++;\n }\n elsif ($com\ eq \"\") \n {\n $com_set=1;\n $com=$A\ RGV[$np];\n \n $np++;\n }\n elsif ($li\ st eq \"\") \n {\n $list_set=1;\n $lis\ t=$ARGV[$np];\n $np++;\n }\n elsif ( $var_\ set eq \"\")\n {\n $var_set=1;\n $var=\ $ARGV[$np];\n $np++;\n }\n }\n\n\n\n\nif (\ $com eq \"\"){print \"You Need to Provide a Comma\ nd [FATAL]\\n\";\n die;\n }\n\n\n\nif (\ $list_set==0) \n {\n $x= int (rand 100000)+1\ ;\n $tmp_file_name=\"tmp_file_$x\";\n open (\ TMP, \">$tmp_file_name\");\n while ()\n\ {\n print TMP $_;\n }\n close (TMP);\ \n open (F, $tmp_file_name);\n }\nelse \n \ {\n open (F, $list);\n }\n\nif ($para==0) \\ n {\n\n @tc_list= ;\n close (F); \n \ \n foreach $val(@tc_list) \n {\n \ \n \n \n $loc_com=$com;\n \ if ($check){$loc_check=$check;}\n \n \ @i_val=($val=~/([^\\s]+)/g);\n \n if (\ $#i_val==0)\n {\n if ($check){$loc_check=~s/$\ var/$i_val[0]/g;}\n $loc_com=~s/$var/$i_val[0]/\ g;\n }\n else\n {\n for ($n=1; $n<=$#i_\ val+1;$n++ )\n {\n \n $sub=\"$v\ ar$n\";\n \n $loc_com=~s/$sub/$i_val\ [$n-1]/g;\n if ($check){$loc_check=~s/$var/\ $i_val[0]/g;}\n }\n }\n if ( $check &&\ -e $loc_check)\n {\n print STDERR \"skipping \ $loc_com...\\n\";\n }\n else\n {\n sy\ stem \"$loc_com\";\n }\n }\n exit;\n }\\ n\nelsif ($para==1) \n {\n print STDERR \"do\ parallel execution of: \\\"$com $list\\\"\\n\";\n\ \n if ($log==1) \n {\n if ($log_file eq \"s\ tdout\" || $log_file eq \"stderr\" ) \n {\n $log\ _file=\"\";\n }\n\n else \n {\n s\ ystem \"echo LOG FILE> $log_file\";\n \n \ }\n }\n else \n {\n open ( OUT, \">/dev/null\")\ ;\n }\n \n \n $id=0;\n $n_sub=0;\n whi\ le ($val=) \n { \n $job_log[$i\ d]=\"$HOME/tmp/$unique_prefix.$id.log_file\";\n \ \n $job=$unique_prefix.\"_$id\";\n open \ (JOB, \">$job\");\n \n $loc_com=$com;\n \ chop $val;\n\n $loc_com=~s/\\$/$val/g;\n \n\ print JOB \"#!/bin/csh\\n\";\n print JOB \ \"#\\$ -cwd\\n\";\n print JOB \"#\\$ -N $uniqu\ e_prefix\\n\";\n if ($queue && !($queue eq \" \ \")) {print JOB \"#\\$ -l $queue\\n\";}\n prin\ t JOB \"#\\n\"; \n print JOB \"$loc\ _com\\n\";\n print JOB \"echo FINISHED >> $jo\ b_log[$id]\\n\";\n print JOB \"pwd\\n\";\n \ \n close (JOB);\n if ( $output_all==1)\n \ {\n system \"qsub $job > $unique_prefix\"; \n \ }\n else\n {system \"qsub $job -e $st\ derr_file -o $stdio_file >$unique_prefix\"; \ \n } \n\n\n\n print STDERR \"$id: $o\ utput_all\\n\";\n $n_sub++;\n if ( $max_su\ b_jobs && $n_sub==$max_sub_jobs) \n {\n $n_sub=m\ onitor_process($min_sub_jobs,@job_log); \n \n \ } \n \n unlink $unique_prefi\ x;\n sleep $pause_time;\n $id++;\n }\n\ \n close (OUT);\n close (F);\n\n print ST\ DERR \"Your $id Jobs Have Been Submited (NAME=$uni\ que_prefix)\\n\";\n monitor_process (0, @job_lo\ g);\n foreach $file(@job_log) {if (-e $file) {u\ nlink($file);}}\n \n }\n\nsub monitor_proces\ s ( @job_list)\n {\n my (@job_list)=@_;\n \ my $min_sub_jobs=shift (@job_list);\n my $n_su\ b_jobs;\n my $finished;\n my $n=0;\n\n $n\ _sub_jobs=-1;\n $finished=0;\n print STDERR \ \"\\nMonitor Batch: [$min_sub_jobs]\";\n \n \ while (!$finished && (($n_sub_jobs>$min_sub_job\ s)|| $n_sub_jobs==-1) ) \n {\n $finished=1;\n $n_s\ ub_jobs=0;\n $n=0;\n foreach $file (@job_list)\n \ {\n \n if (-e $file){;}\n else \n {\\ n $finished=0; $n_sub_jobs++;\n }\ \n }\n system \"sleep 1\";\n }\n \ \n return $n_sub_jobs;\n }\n \n \nif \ ($tmp_file_name){unlink($tmp_file_name);}\n","\n\n\ foreach ($np=0; $np<=$#ARGV; $np++)\n {\n $v\ alue=$ARGV[$np];\n\n if ($value eq \"-file\")\n\ {\n $file= $ARGV[++$np];\n }\n \ elsif ($value eq \"-type\")\n {\n $typ\ e= $ARGV[++$np];\n }\n elsif ($value eq \"\ -institute\")\n {\n $institute= $ARGV[\ ++$np];\n }\n elsif ($value eq \"-author\"\ )\n {\n $author= $ARGV[++$np];\n \ }\n elsif ($value eq \"-date\")\n {\n \ $date= $ARGV[++$np];\n }\n elsif ($val\ ue eq \"-program\")\n {\n $program= $A\ RGV[++$np];\n }\n elsif ($value eq \"-emai\ l\")\n {\n $email= $ARGV[++$np];\n \ }\n else\n {\n print \"$value is an unko\ wn argument[FATAL]\\n\";\n exit (1);\n }\n }\ \n\n\n\nopen F, $file || die;\nprint $INSTITUTE;\n\ if ( $type eq \"c\"){print \"/********************\ *************COPYRIGHT NOTICE*********************\ *************/\\n\";}\nif ( $type eq \"perl\"){pri\ nt \"#################################COPYRIGHT NO\ TICE#################################/\\n\";}\nif \ ( $type eq \"txt\"){print \"----------------------\ ------------COPYRIGHT NOTICE----------------------\ -----------/\\n\";}\n\n\nwhile ()\n {\n s/\\$\ INSTITUTE/$institute/g;\n s/\\$AUTHOR/$author/g;\\ n s/\\$DATE/$date/g;\n s/\\$PROGRAM/$program/g; \ \n s/\\$EMAIL/$email/g; \n if ( $type eq \"txt\ \"){print $_;}\n elsif ($type eq \"c\"){chop $_; \ print \"\\/*$_*\\/\\n\";}\n elsif ($type eq \"per\ l\"){print \"\\#$_\";}\n}\nclose (F);\nif ( $type \ eq \"c\"){print \"/*******************************\ **COPYRIGHT NOTICE********************************\ **/\\n\";}\nif ( $type eq \"perl\"){print \"######\ ###########################COPYRIGHT NOTICE#######\ ##########################/\\n\";}\nif ( $type eq \ \"txt\"){print \"---------------------------------\ -COPYRIGHT NOTICE---------------------------------\ /\\n\";}\n\n","\nwhile (<>) \n {\n s/\\=cc/1234567\ 89/g;\n s/\\bcc/\\$\\(CC\\)/g;\n s/123456789/\\=cc\ /g;\n print $_;\n }\n\n","$version=\"1.00\";\n$rse\ ed= int(rand(100000))+1;\n\n\nif ( $#ARGV==-1)\n \ {\n print \"msa2bootstrap -i -o -input -n -o -tmode -d\ mode -alignpg -rtree -stype -recomput\ e -system \";\n print \"\\n\\t-i: \ input file, can be sequneces, msa, matrix, trees, \ type is specified via -input\";\n print \"\\n\\\ t-input: Type of input data\";\n print \"\\n\\t\ \\tmsa: msa in fasta format\";\n print \"\\n\\t\ \\tseq: compute an msa with -alignpg\";\n print\ \"\\n\\t\\tmatrix: phylipp distance matrix fed di\ rectly to method -tmode [caveat: tmode=nj or upgma\ ]\";\n print \"\\n\\t\\ttree: list of newick tr\ ees directly fed to consence in order to generate \ a bootstraped tree\";\n \n print \"\\n\\t-n:\ number of bootstrap replicates\";\n print \"\\\ n\\t-o: name of the output tree. Files are not ove\ rwritten. Use -recompute to overwrite existing fil\ e\";\n print \"\\n\\t-tmode: tree mode: nj|upgm\ a|parsimony|ml\";\n print \"\\n\\t-dmode: dista\ nce mode\";\n print \"\\n\\t-alignpg: program f\ or aligning sequences (t_coffee=default)\";\n p\ rint \"\\n\\t-rtree: replicate tree file (default:\ no file)\";\n print \"\\n\\t-rmsa: replicate m\ sa file (default: no file)\";\n print \"\\n\\t-\ rmat: replicate matrix file (default: no file)\";\\ n print \"\\n\\t-stype: sequence type: protein,\ dna or cdna\";\n print \"\\n\\t-recompute: for\ ce files to be overwritten\";\n print \"\\n\\t-\ system: cygwin|unix\";\n \n\n \n &my_ex\ it (EXIT_FAILURE);\n }\nforeach $arg (@ARGV){$com\ mand.=\"$arg \";}\n\nprint \"CLINE: $command\\n\";\ \n$threshold=100;\n$trim_msa=0;\n$stype=\"prot\";\\ nprint \"msa2bootstrap \";\n\n$system=\"cygwin\";\\ nif(($command=~/\\-system (\\S+)/))\n {\n $sys\ tem=$1;\n if ( $system eq \"cygwin\")\n {\\ n $exec_extension=\".exe\";\n }\n elsif ( \ $system eq \"unix\")\n {\n $exec_extension=\"\ \";\n print \"system=Unix\";die;\n }\n els\ e\n {\n print \"msa2boostrap: -system=$system\ is an unknown mode [FATAL]\\n\"; die;\n }\n \ \n print \"-system $system \";\n }\nif(($co\ mmand=~/\\-stype (\\S+)/))\n {\n $stype=$1;\n \ }\nprint \"-stype=$stype \";\n\n\n\nif(($command=\ ~/\\-i (\\S+)/))\n {\n $msa=$1;\n print \"-\ i $msa \";\n }\n\nif(($command=~/\\-rtree (\\S+)/\ ))\n {\n $rtree=$1;\n print \"-rtree=$rtree\ \";\n }\n\nif(($command=~/\\-rmsa (\\S+)/))\n {\ \n $rmsa=$1;\n }\nif(($command=~/\\-rmat (\\S+\ )/))\n {\n $rmat=$1;\n }\n$input=\"seq\";\nif\ (($command=~/\\-input (\\S+)/))\n {\n $input=$\ 1;\n }\nprint \"-input=$input \";\n\n$dmode=\"kim\ ura\";\nif(($command=~/\\-dmode (\\S+)/))\n {\n \ $dmode=$1;\n }\nprint \"-dmode=$dmode \";\n$ali\ gnpg=\"muscle\";\nif(($command=~/\\-alignpg (\\S+)\ /))\n {\n $alignpg=$1;\n }\nprint \"-alignpg=\ $dmode \";\n\n$tmode=\"nj\";\nif(($command=~/\\-tm\ ode (\\S+)/))\n {\n $tmode=$1;\n }\nprint \"-\ tmode=$tmode \";\n$recompute=0;\nif(($command=~/\\\ -recompute/))\n {\n $recompute=1;\n print \\ "-recompute \";\n }\n\n$out=$msa;\n$out=~s/\\..*/\ /;\n$out.=\".bph\";\nif(($command=~/\\-o (\\S+)/))\ \n {\n $out=$1;\n \n }\nprint \"-out=$out \ \";\nif (-e $out && !$recompute)\n {\n print \\ "\\nNo Computation Required $out already exists\\n\ \";\n &my_exit (EXIT_SUCCESS);\n \n }\n\n$n\ =100;\nif(($command=~/\\-n (\\d+)/))\n {\n $n=\ $1;\n }\nprint \"-n=$n \";\n$seed=3;\nif(($comman\ d=~/\\-s (\\d+)/))\n {\n $seed=$1;\n }\nprint\ \"-s=$seed\";\n\nif(($command=~/\\-run_name (\\d+\ )/))\n {\n $suffix=$1;\n }\nelse\n {\n $m\ sa=~/([^.]+)/;\n $suffix=$1;\n }\nprint \"-run\ _name=$suffix\";\n\n\nif ( $input eq \"seq\")\n {\ \n $seq=$msa;\n $msa=\"$suffix.prot_msa\";\n\ \n if ($stype eq \"cdna\")\n {\n $cdna\ _seq=$seq;\n $clean_cdna_seq=&vtmpnam();\n $seq=&v\ tmpnam();\n `t_coffee -other_pg seq_reformat -in $\ cdna_seq -action +clean_cdna >$clean_cdna_seq`;\n \ `t_coffee -other_pg seq_reformat -in $clean_cdna_s\ eq -action +translate >$seq`;\n \n }\n\n i\ f (!-e $msa || $recompute)\n {\n print \"\\n#\ #### Compute an MSA With $alignpg\\n\";\n \n if \ ( $alignpg eq \"t_coffee\")\n {`$alignpg $seq -o\ utfile=$msa >/dev/null 2>/dev/null`;}\n elsif ( $a\ lignpg eq \"muscle\")\n {\n `$alignpg -in $s\ eq > $msa 2>/dev/null`;\n }\n elsif ( $alignpg e\ q \"clustalw\")\n {\n `$alignpg -infile=$seq\ -outfile=$msa -quicktree >/dev/null 2>/dev/null`;\ \n }\n elsif ( $align eq \"mafft\")\n {\n \ `$alignpg $seq > $msa >/dev/null 2>/dev/null`;\n \ }\n else\n {\n `$alignpg -in=$seq -outfile=\ $msa`;\n }\n }\n if (!-e $msa)\n {\\ n print \"\\nError: $alignpg Could Not produce the\ MSA $msa [FATAL]\\n\";\n }\n\n if ($stype\ eq \"cdna\")\n {\n $msa2=\"$suffix.cdna_msa\\ ";\n `t_coffee -other_pg seq_reformat -in $clean_c\ dna_seq -in2 $msa -action +thread_dna_on_prot_aln \ -output fasta_aln >$msa2`;\n $msa=$msa2;\n }\ \n \n $input=\"msa\";\n }\n\n\n\n$seqboot_o\ =&vtmpnam();\n$seqboot_c=&vtmpnam();\n\n$protdist_\ o=&vtmpnam();\n$protdist_c=&vtmpnam();\nif ( $inpu\ t eq \"msa\")\n {\n if ($tmode eq \"nj\" || $t\ mode eq \"upgma\"){$input=\"matrix\";}\n \n \ $lmsa= &vtmpnam ();\n `t_coffee -other_pg seq_r\ eformat -in $msa -output phylip_aln > $lmsa`;\n \ \n if ( -e \"outfile\"){unlink (\"outfile\");}\ \n # run seqboot\n \n if ( $n>1)\n {\n\ print \"Run SeqBoot .....\";\n open (F, \">$seqbo\ ot_c\");\n print F \"$lmsa\\nR\\n$n\\nY\\n$seed\\n\ \";\n close (F);\n `seqboot$exec_extension < $seq\ boot_c`;\n if ( -e \"outfile\"){ print \"[OK]\\n\"\ ;}\n else { print \"[FAILED]\\n\";&my_exit (EXIT_F\ AILURE);}\n `mv outfile $seqboot_o`;\n }\n \ else\n {\n `cp $lmsa $seqboot_o`;\n }\n\ \n if ($rmsa){`cp $seqboot_o $rmsa`;}\n \n \ if ($tmode eq \"nj\" || $tmode eq \"upgma\")\n \ {\n if ( $stype eq \"prot\")\n {\n # run\ protdist\n print \"Run Protdist [dmode=$dmode\ ]\";\n if ($dmode eq \"kimura\")\n {\n \ $dmode=\"P\\nP\\nP\";\n }\n else\n \ {\n print \"\\n$dmode is an unknown mode for Pro\ tdist [FATAL:msa2bootstrap.pl]\\n\";\n &my_exit (\ EXIT_FAILURE);\n }\n open (F, \">$protdi\ st_c\");\n if ($n>1){print F \"$seqboot_o\\n$d\ mode\\nM\\nD\\n$n\\nY\\n\";}\n else {printf F \ \"$seqboot_o\\n$dmode\\nY\\n\";}\n close (F);\\ n `cp $protdist_c pd_comm`;\n `protdist$ex\ ec_extension < $protdist_c`;\n if ( -e \"outf\ ile\"){ print \"[OK]\\n\";}\n else { print \"[\ FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n `mv o\ utfile $protdist_o`;\n \n }\n elsif ( $stype eq\ \"cdna\" || $stype eq \"dna\")\n {\n print \ \"Run dnadist [dmode=default\";\n open (F, \">\ $protdist_c\");\n if ($n>1){print F \"$seqboot\ _o\\nM\\nD\\n$n\\nY\\n\";}\n else {printf F \"\ $seqboot_o\\nY\\n\";}\n close (F);\n `prot\ dist$exec_extension < $protdist_c`;\n if ( -e\ \"outfile\"){ print \"[OK]\\n\";}\n else { pr\ int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n \ `mv outfile $protdist_o`;\n }\n }\n }\ne\ lsif ( $input eq \"matrix\")\n {\n $protdist_o\ =&vtmpnam();\n print \"MSA: $msa\\n\";\n `cp\ $msa $protdist_o`;\n $n=1;\n }\n\n\n\n\n\n$nb\ _o=&vtmpnam();\n$nb_c=&vtmpnam();\nif ($input eq \\ "matrix\" && $tmode ne \"parsimony\" && $tmode ne \ \"ml\")\n {\n print \"Run neighbor [tmode=$tmo\ de]\";\n\n if ($tmode eq \"nj\")\n {\n $tm\ ode=\"\\nN\\nN\";\n }\n elsif ( $tmode eq \ \"upgma\")\n {\n $tmode = \"\\nN\";\n }\\ n else\n {\n print \"\\n ERROR: $tmode is \ an unknown tree computation mode\\n\";\n &my_exit \ (EXIT_FAILURE);\n }\n\n open (F, \">$nb_c\\ ");\n if ($n>1){print F \"$protdist_o$tmode\\nM\ \\n$n\\n$seed\\nY\\n\";}\n else {print F \"$pro\ tdist_o$tmode\\nY\\n\";}\n close (F);\n\n `n\ eighbor$exec_extension < $nb_c`;\n if ( -e \"o\ uttree\"){ print \"[Neighbor OK]\\n\";}\n else \ { print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\\ n `mv outtree $nb_o`;\n unlink (\"outfile\")\ ;\n }\nelsif ($input eq \"msa\" && $tmode eq \"pa\ rsimony\")\n {\n if ( -e \"outfile\"){unlink (\ \"outfile\");}\n if ( -e \"outtree\"){unlink (\\ "outtree\");}\n \n if ($stype eq \"prot\")\n\ {\n print \"Run protpars [tmode=$tmode]\";\n\ open (F, \">$nb_c\");\n if ($n>1){print F \"$seqb\ oot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n else \ {print F \"$seqboot_o\\nY\\n\";}\n close (F);\n `p\ rotpars$exec_extension < $nb_c`;\n }\n el\ sif ( $stype eq \"dna\" || $stype eq \"cdna\")\n \ {\n print \"Run dnapars [tmode=$tmode]\";\n op\ en (F, \">$nb_c\");\n if ($n>1){print F \"$seqboot\ _o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n else {pr\ int F \"$seqboot_o\\nY\\n\";}\n close (F);\n `dnap\ ars$exec_extension < $nb_c`;\n }\n if ( -\ e \"outtree\"){ print \"[OK]\\n\";}\n else { pr\ int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n \ `mv outtree $nb_o`;\n unlink (\"outfile\");\n \ }\nelsif ($input eq \"msa\" && $tmode eq \"ml\")\n\ {\n if ( -e \"outfile\"){unlink (\"outfile\")\ ;}\n if ( -e \"outtree\"){unlink (\"outtree\");\ }\n \n if ($stype eq \"prot\")\n {\n pr\ int \"Error: ML impossible with Protein Sequences \ [ERROR]\";\n &my_exit (EXIT_FAILURE);\n }\n \ elsif ( $stype eq \"dna\" || $stype eq \"cdna\")\ \n {\n print \"Run dnaml [tmode=$tmode]\";\n \ open (F, \">$nb_c\");\n if ($n>1){print F \"$seqbo\ ot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n else {\ print F \"$seqboot_o\\nY\\n\";}\n close (F);\n `dn\ aml$exec_extension < $nb_c`;\n }\n if ( -\ e \"outtree\"){ print \"[OK]\\n\";}\n else { pr\ int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n \ `mv outtree $nb_o`;\n unlink (\"outfile\");\n \ }\n\n\nelse\n {\n `cp $msa $nb_o`;\n $n=2;\\ n }\n\nif ($rmsa && -e $seqboot_o){print \"\\nOut\ put List of $n Replicate MSA: $rmsa\\n\";`cp $seqb\ oot_o $rmsa`;}\nif ($rmat && -e $protdist_o){print\ \"\\nOutput List of $n Replicate MATRICES: $rmat\\ \n\";`cp $protdist_o $rmat`;}\nif ($rtree && -e $n\ b_o){print \"\\nOutput List of $n Replicate TREES:\ $rtree\\n\";`cp $nb_o $rtree`;}\n\n\n\n$con_o=&vt\ mpnam();\n$con_c=&vtmpnam();\nif ($n >1)\n {\n \ print \"Run Consense.....\";\n open (F, \">$co\ n_c\");\n print F \"$nb_o\\nY\\n\";\n close \ (F);\n `consense$exec_extension < $con_c`;\n \ if ( -e \"outfile\"){ print \"[OK]\\n\";}\n e\ lse { print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE\ );}\n `mv outtree $con_o`;\n unlink (\"outfi\ le\");\n }\nelse\n {\n `cp $nb_o $con_o`;\n \ }\n\n\n`cp $con_o $out`;\nif ( !-e $out)\n {\n \ print \"Tree Computation failed [FAILED]\\n\";\n \ &my_exit (EXIT_FAILURE);\n }\nelsif ($n>1)\n \ {\n print \"\\nOutput Bootstrapped Tree: $out\\\ n\";\n $avg=`t_coffee -other_pg seq_reformat -i\ n $out -action +avg_bootstrap`;\n $avg=~s/\\n//\ g;\n print \"$avg\\n\";\n }\nelse\n {\n pr\ int \"\\nOutput Tree: $out\\n\";\n }\n\nopen (F, \ \"$out\");\nwhile ()\n {\n \n $tree.=$_;\ \n }\nclose (F);\n$tree=~s/\\n//g;\nprint \"BPH: \ $tree\\n\";\n\n\n&my_exit (EXIT_SUCCESS);\n\nsub m\ y_exit \n {\n my $m=@_[0];\n &clean_vtmpnam\ ();\n exit ($m);\n }\nsub vtmpnam \n {\n m\ y $file;\n\n\n $ntmp++;\n $file=\"tmp4msa2bo\ otstrap.$rseed.$$.$ntmp\";\n \n push (@tmpfi\ le, $file);\n return $file;\n }\nsub clean_vtm\ pnam \n {\n my $t;\n foreach $t (@tmpfile)\\ n {\n if ( -e $t){unlink ($t)};\n }\n }\ \n","use Env;\n$seq_reformat=\"t_coffee -other_pg \ seq_reformat \";\n$VersionTag=\"1.00\";\n$step=1;\\ n$unset=\"\";\n$scoreT1=$scoreT2=$nseqT=$dp_limit=\ $unset;\n@tl=();\nchomp($tc_version=`t_coffee -ver\ sion`);$tc_version=~s/PROGRAM: //;\n\n\nprint STDE\ RR \"\\n******************************************\ ***********************\";\nprint STDERR \"\\n* \ HIGH LEVEL PROGRAM: T-COFFEE_DPA Version $\ VersionTag\";\nprint STDERR \"\\n* LOW \ LEVEL PROGRAM: $tc_version \";\nprint STDERR \"\\n\ **************************************************\ ***************\";\n\nif (!@ARGV)\n {\n print \ \"t_coffee_dpa accepts every t_coffee_flag.\\nType\ t_coffee to obtain a list\\n\";\n print \"Requ\ ires $TC_VERSION\\n\";\n print \"Requires \";\n\ print \"t_coffee_dpa specific flags:\\n\";\n \ print \"\\t-dpa_master_aln....................Ma\ ster alignment: provided OR computed\\n\";\n pr\ int \"\\t-dpa_master_aln....................By def\ ault, Computed with t_coffee -very_fast\\n\";\n \ print \"\\t-dpa_master_aln=.............Use\ file, (must be an aln in Fasta or ClustalW\\n\";\\ n print \"\\t-dpa_master_aln=.........\ .Compute aln with pg -in seq -out aln`\\n\";\n \ print \"\\t-dpa_maxnseq.......................Maxi\ mum number of sequences in subgroups\\n\";\n pr\ int \"\\t-dpa_min_score1....................Minimu\ m Id for two sequences to be grouped in ref_aln\\n\ \";\n print \"\\t-dpa_min_score2...............\ .....Minimum Id within a subgroup\\n\";\n print\ \"\\t-dpa_debug.........................Keep Tmp \ File (for debug purpose)\\n\\n\";\n \n exit \ (0);\n }\nforeach $arg (@ARGV)\n {\n $arg_lis\ t.=\" $arg\";\n }\n$arg_list=~s/[=,;]/ /g;\n\n\n(\ $seq0, $arg_list)=&extract_val_from_arg_list(\"^\"\ ,$arg_list, \"SPLICE\",\"unset\");\n($seq1, $arg_l\ ist)=&extract_val_from_arg_list(\"-seq\",$arg_list\ , \"SPLICE\",\"unset\");\n($seq2, $arg_list)=&extr\ act_val_from_arg_list(\"-in\",$arg_list, \"KEEP\",\ \"unset\");\n($seq3, $arg_list)=&extract_val_from_\ arg_list(\"-infile\",$arg_list, \"SPLICE\",\"unset\ \");\n($prf, $arg_list)=&extract_val_from_arg_lis\ t(\"-profile\",$arg_list, \"SPLICE\",\"unset\");\n\ \n$gl{'Seq'}=$seq=&vtmpnam();#file containing all \ the sequences\n\n #1-remove sequences from -in\n\ if ( $arg_list =~/\\-in\\b/)\n {\n my $save, $\ name;\n while($arg_list=~/\\-in\\b[^-]+(\\bS[\\\ w.]+)/)\n {\n $name=$1;$name=~s/^.//;\n if ( \ !-e $name){$save.=\" S$name \";}\n\n $arg_list=~s/\ S$name/ /;\n }\n $arg_list=~s/\\-in\\b/\\-\ in $save /;\n }\n #2-prepare \n\nif (!($arg_lis\ t=~/\\-outorder/))\n {\n \n $output_cl .=\"\ -outorder=$seq\";\n }\n@output_flag=(\"-output\"\ ,\"-outfile\", \"-run_name\", \"-outorder\"); \nfo\ reach $v1 (@output_flag)\n {\n ($v2, $arg_list\ )=&extract_val_from_arg_list($v1,$arg_list, \"SPLI\ CE\",\"unset\");\n if ($v2 ne \"\")\n {\n\\ n if ($v1 eq \"-run_name\"){$run_name=$v2;$output_\ cl .=\" $v1 $v2 \";}\n elsif ( $v1 eq \"-outorder\\ ")\n {\n if ( $v2 eq \"input\"){$v2=$seq;}\n\ $outorder=$v2;$output_cl .=\" $v1 $v2 \";\n \ }\n else\n {\n $output_cl .=\" $v1 $v2 \";\\ n }\n }\n }\n\n\n($dpa_master_aln, $arg_lis\ t) =&extract_val_from_arg_list(\"-dpa_master_aln\\ ",$arg_list, \"SPLICE\", \"t_coffee\");\n$dpa_mast\ er_aln=~s/\\s//g;\n($nseqT, $arg_list) =\ &extract_val_from_arg_list(\"-dpa_maxnseq\",$arg_l\ ist, \"SPLICE\", 30);\n($scoreT1, $arg_list) \ =&extract_val_from_arg_list(\"-dpa_min_score1\"\ ,$arg_list, \"SPLICE\", 80);\n($scoreT2, $arg_list\ ) =&extract_val_from_arg_list(\"-dpa_min_s\ core2\" ,$arg_list, \"SPLICE\", 30);\n($dpa_lim\ it, $arg_list) =&extract_val_from_arg_list(\\ "-dpa_limit\" ,$arg_list, \"SPLICE\", 0);\n\ ($dpa_delta_id, $arg_list) =&extract_val_from_a\ rg_list(\"-dpa_delta_id\" ,$arg_list, \"SPL\ ICE\", 1);\n($dpa_debug, $arg_list) =&extrac\ t_val_from_arg_list(\"-dpa_debug\" ,$arg\ _list, \"SPLICE\", 0);\n\n\n$in_seq=$seq0.\" \".$s\ eq1.\" \".$seq2.\" \".$seq3;\n$in_prf=(($prf ne $u\ nset)?\"$prf \":\"\");\n&exit_dpa (($in_seq eq \"\\ " && $in_prf eq \"\")?1:0, \"ERROR: You did not Pr\ ovide any sequences. Use the -seq flag [FATAL: t_c\ offee_dpa]\\n\", EXIT_FAILURE);\n\n\nprint STDERR \ \"\\nSTART DPA COMPUTATION\";\n\n\n\nif ($in_seq=~\ /\\S+/)\n {\n \n print STDERR \"\\n Step $s\ tep: Gather all the sequences into the tmp file: [\ $seq]\";$step++; \n &my_system (\"t_coffee $in_\ seq -convert -quiet -output fasta_seq -outfile=$se\ q -maxnseq 0\");\n }\n\nif ( !-e $seq){$seq=\"\";\ }\n\nif ($in_prf=~/\\S+/)\n {\n $seq_in_type=\\ "profile\"; \n $seq.= $in_prf; \n }\nif ($seq \ eq \"\"){ &exit_dpa (1, \"\\nERROR: No Sequence FO\ und. Provide Sequences with the -seq flag [FATAL: \ t_coffee_dpa]\", EXIT_FAILURE);}\n\n \n\nif ( $run\ _name)\n {\n $suffix=$run_name;\n }\nelsif ($\ in_seq=~/\\b(S[\\w.]+\\b)/)\n {\n my $suffix1,\ $sufffix2;\n $suffix1=$suffix2=$1;\n $suffi\ x2=~s/^S//;\n if ( -e $suffix1){$suffix=$suffix\ 1;}\n elsif ( -e $suffix2){$suffix=$suffix2;}\n\ else\n {\n $suffix=&vtmpnam(); \n }\\ n $suffix=~s/\\.\\w+//;\n }\n\nelse\n {\n \ $suffix=&vtmpnam();\n }\n\n\nif (!$run_name){$out\ put_cl.=\" -run_name $suffix \";}\n\n\n$gl{'Tree'}\ =&seq2dpa_tree ($seq, \"$suffix.dpadnd\");\n\nprin\ t STDERR \"\\n Step $step: Prepare guide tree: $gl\ {'Tree'}\";$step++;\n\nprint STDERR \"\\n Step $st\ ep: Identify and Align Closely Related Groups\";$s\ tep++;\n%gl=&make_one_pass (0, $scoreT1,\"Align\",\ %gl);\n\nprint STDERR \"\\n Step $step: Make Multi\ ple Group Alignment\";$step++;\nwhile (!%gl ||$gl{\ 'Ng'}>$nseqT)\n {\n %gl=&make_one_pass ($nseqT\ , $scoreT2,\"t_coffee\",%gl);\n if ( $gl{'Newgr\ oups'}==0){$scoreT2--;} \n }\nprint STDERR \"\\ \n Step $step: Make The Final Alignment\";$step++;\ \n\n\n$arg_list .=$output_cl;\n\n\n%gl=&tree2group\ (0,0, %gl);\n$gl{$gl{'0'}{'File'}}{'Output'}=\"\"\ ;\n$a=0;\n&align_groups (\"t_coffee\",'0', $arg_li\ st, \" \", %gl);\n\n\n\nif ( !$dpa_keep_tmpfile){&\ clean_tmp_file (@tl);}\n\n\n\nsub seq2dpa_tree \n \ {\n my $seq=@_[0];\n my $newtree=@_[1];\n \ my $aln=&vtmpnam ();\n\n &my_system (\"t_coff\ ee -special_mode quickaln -in $seq -outfile $aln -\ quiet\");\n &my_system (\"$seq_reformat -in $al\ n -action +aln2tree +tree2dpatree -output newick >\ $newtree\");\n return $newtree;\n } \nsub seq2\ dpa_tree_old \n {\n my $aln=@_[0];\n my $ne\ wtree=@_[1];\n \n \n &my_system(\"$seq_re\ format -in $aln -action +seq2dpatree -output newic\ k > $newtree\");\n return $newtree;\n }\nsub a\ ln2dpa_tree \n {\n my $aln=@_[0];\n my $new\ tree=&vtmpnam();\n \n &my_system(\"$seq_refo\ rmat -in $aln -action +aln2tree +tree2dpatree -out\ put newick > $newtree\");\n return $newtree;\n \ }\nsub group_file2ngroups\n {\n my $file=@_[0\ ];\n my $n;\n \n open ( F, $file);\n w\ hile ()\n {\n $n+=/\\>/;\n }\n clo\ se (F);\n return $n;\n }\n\nsub make_one_pass\\ n {\n my ($N, $ID,$pg, %gl)=@_;\n my $a;\n\\ n %gl=&tree2group ($N,$ID,%gl);\n if (!$gl{'\ Newgroups'}){return %gl;}\n else\n {\n for\ ( $a=0; $a< $ng; $a++)\n {\n if ($gl{$gl{$a\ }{'File'}}{'Ng'}>1){&display_group($a, %gl);}\n \ &align_groups ($pg, $a, $arg_list, \" -quiet=qui\ et \", %gl);\n }\n return %gl;\n }\n }\n\n\ sub tree2group \n {\n my ($N, $ID, %gl)=@_;\n \ my $prefix=&vtmpnam();\n my $group_file=&vtm\ pnam();\n my $file;\n my $oldtree=&vtmpnam()\ ;\n my $n;\n my $tree;\n\n\n if ( $gl{'Ng\ '}==1){return %gl;}\n $tree=$gl{'Tree'}; \n \ \n #1 extract the groups\n &my_system (\"$se\ q_reformat -in $tree -action +tree2group $N $ID $p\ refix > $group_file\");\n $n=group_file2ngroups\ ($group_file);\n \n \n $gl{'Newgroups'}=1\ ;\n if ( $n==$gl{'Ng'})\n {\n $gl{'Newgrou\ ps'}=0;\n return %gl;\n }\n $gl{'Iteration\ '}++;\n $gl{'MaxNseq'}=$N;$gl{'MinID'}=$ID;\n \ $gl{'GroupFile'}=$group_file;$gl{'Ng'}=$ng=0;\n \ #2 Process the group list into the hash\n op\ en (F, $group_file);\n while ()\n {\n $\ gl{'File'}.=$_;\n if (/\\>/)\n {\n $line=$_;\ \n $line=~s/\\>//;\n @list=($line=~/(\\S+)\ /g);\n $file=$gl{$ng}{'File'}=shift @list;\n \ $gl{$file}{'Output'}=$file;\n \n $gl{$f\ ile}{'Ng'}=$#list+1;\n if ($gl{$file}{'Ng'}>1)\ { $gl{$file}{'Tlist'}=$gl{$file}{'Alist'}=\"(\";}\\ n foreach $l (@list)\n {\n \n $gl{$file\ }{'List'}.=\" $l \";\n \n if (!$gl{$l}{'Tlist'})\ \n {\n $gl{$l}{'Tlist'}=\"$l\";\n $gl\ {$l}{'Alist'}=\"$l\";\n $gl{$l}{'Nseq'}=1;\n \ $gl{$l}{'Ng'}=1;\n }\n $gl{$file}{'Tlist'\ }.=\"$gl{$l}{'Tlist'},\";\n $gl{$file}{'Alist'}.=\ \"$gl{$l}{'Tlist'}|\";\n $gl{$file}{'Nseq'}+=$gl{\ $l}{'Nseq'};\n }\n \n\n chop($gl{$fi\ le}{'Tlist'});chop($gl{$file}{'Alist'});\n if \ ($gl{$file}{'Ng'}>1){$gl{$file}{'Tlist'}.=\")\"; $\ gl{$file}{'Alist'}.=\");\";}\n $ng++;\n } \n\ }\n $gl{'Ng'}=$ng;\n close (F);\n \\ n #3 Update the old tree with the new groups\n \ $gl{'Tree'}=&vtmpnam();\n &my_system (\"$seq\ _reformat -in $tree -action +collapse_tree $group_\ file -output newick > $gl{'Tree'}\");\n \n r\ eturn %gl;\n }\n\nsub display_group \n {\n my\ ($g,%gl)=@_;\n my $f;\n \n if ( $g==-1)\\ n {\n print STDERR \"\\nIteration $gl{'Iterat\ ion'} [MaxN=$gl{'MaxNseq'}][MinID=$gl{'MinID'}]\";\ \n }\n else\n {\n\n $f=$gl{$g}{'File'\ };\n $action=($gl{$f}{'Ng'}==1 || $gl{'Iteration'}\ ==1)?\"KEEP \":\"ALIGN \";\n print STDERR \ \"\\n\\t[$action][MaxN=$gl{'MaxNseq'}][MinID=$gl{'\ MinID'}][File $f][Nseq=$gl{$f}{'Nseq'}][Ngroups=$g\ l{$f}{'Ng'}][$gl{$f}{'Alist'}]\";\n }\n }\n \ \n\n\nsub align_groups\n {\n my ($pg, $g,\ $arg, $extra_arg,%gl)=@_;\n my $f;\n my $Ou\ tput,$Outflag;\n \n \n $f=$gl{$g}{'File'}\ ;\n $Output=($gl{$f}{'Output'});\n \n if \ ( $pg eq \"Align\")\n {\n if ( !-e $f)\n {\\ n $command=\"$seq_reformat -in $gl{'Seq'} -ac\ tion +extract_aln $gl{'GroupFile'}\";\n if ($g\ l{$f}{'Ng'}>1)\n {\n &my_system ($command);\ \n $command=\"t_coffee -special_mode quick_aln S\ $f -outfile=$Output -quiet\";\n }\n }\n el\ se \n {$command=\"\";}\n }\n elsif ( -e \ $f)\n { \n $Outflag=($Output)?\"-outfile=$Out\ put\":\"\";\n $command=\"$pg -infile $f $Outflag -\ quiet stdout $arg $extra_arg -maxnseq 0 -convert -\ quiet stdout\";\n }\n elsif ( $gl{$f}{'Ng'\ }==1)\n {\n $action=($dpa_debug)?\"cp\":\"mv\\ ";\n $command=\"$action $gl{$f}{'List'} $Output\";\ \n }\n else\n {\n $Outflag=($Output)?\ \"-outfile=$Output\":\"\";\n $command=\"$pg -profi\ le $gl{$f}{'List'} $Outflag $arg $extra_arg -maxns\ eq 0\";\n }\n \n &my_system ($command);\ \n return $outfile;\n }\n \nsub my_system \\ n {\n my $command=@_[0];\n my $force=@_[1];\ \n my $status;\n\n if ( $dpa_debug) {print S\ TDERR \"\\nCOMMAND: $command\";}\n $status=syst\ em ($command);\n\n if (!$force)\n {\n &e\ xit_dpa (($status==1), \"Failed in Command:\\n$com\ mand\\n[FATAL: t_coffee_dpa]\\n\", EXIT_FAILURE);\\ n }\n \n return $status;\n }\n\nsub v\ tmpnam\n {\n my $prefix=@_[0];\n my $tmp_fi\ le_name;\n\n $tmp_prefix=($prefix)?$prefix:\"dp\ a_tmp_file_$$\";\n \n $tmp_count++;\n $tmp\ _file_name=\"$tmp_prefix\".\"$tmp_count\";\n $t\ l[$#tl+1]=$tmp_file_name;\n return $tmp_file_na\ me;\n }\n\nsub clean_tmp_file\n {\n\n my $lis\ t;\n my $file;\n \n if ($dpa_debug){retur\ n;}\n $list=vtmpnam();\n `ls -1 | grep $tmp_\ prefix>$list`;\n \n open (F,$list);\n whi\ le ( )\n {\n $file=$_;\n chop $file;\n if \ ( -e $file){unlink $file;}\n }\n close (F)\ ;\n unlink $list;\n }\n\n\nsub exit_dpa\n {\n\ my $condition=@_[0];\n my $error_msg=@_[1];\n \ my $exit_value=@_[2];\n if ( $condition)\n {\n\ print \"$error_msg\\n\";\n exit ($exit_\ value);\n }\n else\n {\n return;\n \ }\n \n}\nsub extract_val_from_arg_list\n {\n \ my $arg=@_[0];\n my $arg_list=@_[1];\n my $k\ eep_flag=@_[2];\n my $default_value=@_[3];\n \ my $val=\"\";\n \n #protect\n $arg_list=\ ~s/\\s-/ \\@/g;\n $arg=~s/-/\\@/g;\n \n #\ search\n if ($arg eq \"^\")\n {\n $arg_lis\ t=~/^([^@]*)/;\n $val=$1;\n }\n else\n \ {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n \n \ #remove trailing spaces\n $val=~s/\\s*$//;\n \ \n #remove the parsed sequence if needed\n \ if (($val ne \"\") && $keep_flag ne \"KEEP\")\n \ {\n if ( $arg eq \"^\"){$arg_list=~s/$val/ /;}\\ n else {$arg_list=~s/($arg [^@]*)/ /;}\n }\n \ \n #unprotect\n $arg_list=~s/\\@/-/g;\n $\ arg=~s/\\@/-/g;\n \n if (($val eq \"\") && $\ default_value ne \"unset\"){$val=$default_value;}\\ n \n return $val, $arg_list;\n }\n$program=\ \"T-COFFEE (Version_7.90)\";\\n\n","\n$DEBUG=1;\n$\ dpa_nseq=10;\n$dpa_sim=0;\nif (!@ARGV)\n {\n `\ t_coffee`;\n exit (0);\n }\nforeach $arg (@ARG\ V)\n {\n $arg_list.=\" $arg\";\n }\n$max_nseq\ =10;\n($seq0, $arg_list)=&extract_val_from_arg_lis\ t(\"^\",$arg_list);\n($seq1, $arg_list)=&extract_v\ al_from_arg_list(\"-seq\",$arg_list);\n($seq2, $ar\ g_list)=&extract_val_from_arg_list(\"-in\",$arg_li\ st, \"KEEP\");\n($seq3, $arg_list)=&extract_val_fr\ om_arg_list(\"-infile\",$arg_list);\n$in_seq=$seq0\ .\" \".$seq1.\" \".$seq2.\" \".$seq3;\n\n$seq=vtmp\ nam();\n`t_coffee $in_seq -convert -output fasta_s\ eq -outfile=$seq`;\n\n\n($dpa_nseq, $arg_list)=&ex\ tract_val_from_arg_list(\"-dpa_nseq\",$arg_list);\\ n($master_aln, $arg_list)=&extract_val_from_arg_li\ st(\"-master_aln\",$arg_list);\n($sim_matrix, $arg\ _list)=&extract_val_from_arg_list(\"-sim_matrix\",\ $arg_list);\n($core_seq, $arg_list)=&extract_val_f\ rom_arg_list(\"-core_seq\",$arg_list);\n($dpa_sim,\ $arg_list)=&extract_val_from_arg_list(\"-dpa_sim\\ ",$arg_list);\n($run_name, $arg_list)=&extract_val\ _from_arg_list(\"-run_name\",$arg_list);\n($output\ , $arg_list)=&extract_val_from_arg_list(\"-output\\ ",$arg_list);\n\n\n\nif (!$sim_mat && !$master_aln\ )#Compute the fast alignment\n {\n $ref_aln=vt\ mpnam();\n `t_coffee -seq=$seq -very_fast -outf\ ile=$ref_aln -quiet`;\n \n }\n\nif (!$sim_mat)\ \n {\n $sim_mat=vtmpnam();\n `seq_reformat \ -in $ref_aln -output sim > $sim_mat`;\n }\n\nif (\ !$core_seq)\n {\n $core_seq=vtmpnam();\n `\ seq_reformat -in $ref_aln -action +trimTC N$max_ns\ eq -output fasta_seq > $core_seq`;\n }\n@core_nam\ e=`seq_reformat -in $core_seq -output name `; \n\n\ @tot_name=`seq_reformat -in $seq -output name `;\n\ \nforeach $s (@core_name){$s=~s/\\s//g;$hcore{$s}=\ 1;}\nforeach $s (@tot_name){$s=~s/\\s//g;}\nprint \ STDERR \"T-Coffee_dpa:\\n\";\nprint STDERR \"\\tTO\ TAL SEQ: @tot_name\\n\";\nprint STDERR \"\\tCHOSE\ N SEQ: @core_name\\n\";\n\n\n\nopen (F, $sim_mat);\ \nwhile ( )\n {\n @l=($_=~/(\\b[\\S]+\\b)/g\ );\n if (($l[0] eq \"TOP\" || $l[0] eq \"BOT\")\ )\n {\n $s1=$l[1];$s2=$l[2];$v=$l[3];\n if ($\ hcore{$s1} && !$hcore{$s2})\n {\n if (!$hseq\ {$s2}{\"sim\"} || $v>$hseq{$s2}{\"sim\"})\n \ {\n $hseq{$s2}{\"sim\"}=$v;$hseq{$s2}{\"seq\"}=$s\ 1;\n }\n }\n }\n }\nclose (F);\nfore\ ach $s (@tot_name)\n {\n\n if ( !$hseq{$s}{\"s\ eq\"}){;}\n else\n {\n $s2=$hseq{$s}{\"seq\ \"};\n $v=$hseq{$s}{\"sim\"};\n \n if ($v>$dpa_si\ m)\n {\n $hseq{$s}{'used'}=1;\n $seq_lis\ t{$s2}{$seq_list{$s2}{'nseq'}++}=$s;\n }\n \ }\n }\nforeach $s (@core_name){$seq_list{$s}{$seq\ _list{$s}{'nseq'}++}=$s;$hseq{$s}{'used'}=1;}\nfor\ each $s (@tot_name){if (!$hseq{$s}{'used'}){$seq_l\ ist{'unused'}{$seq_list{'unused'}{'nseq'}++}=$s;}}\ \n\n\n$n=0;\nforeach $s (@core_name)\n {\n $ng\ ++;\n $n=$seq_list{$s}{'nseq'};\n for (@g_li\ st=(), $a=0; $a<$n; $a++){@g_list=(@g_list,$seq_li\ st{$s}{$a});}\n\n $g_seq=vtmpnam();\n $g_aln\ =vtmpnam();\n \n print STDERR \"Group $ng: $\ #g_list Seq: @g_list: \";\n \n \n `seq_re\ format -in $seq -action +lower +keep_name +extract\ _seq @g_list -output fasta_seq > $g_seq`;\n \n\ \n if ( $#g_list==0)\n {\n print STDER\ R \"[No aln]\\n\";\n $g_aln=$g_seq;\n }\n \ elsif ($#g_list<$max_nseq) \n {\n print STDER\ R \"[t_coffee]\\n\";\n `t_coffee $g_seq -outfile=$\ g_aln -quiet $arg_list`;\n }\n else\n \ {\n print STDERR \"[t_coffee_dpa]\\n\";\n `t_coff\ ee_dpa2 $g_seq -outfile=$g_aln $arg_list -sim_matr\ ix $sim_matrix -dpa_nseq $dpa_nseq`;\n }\n \ @profile_list=(@profile_list, $g_aln);\n }\n\n\n\ print \"UNUSED $seq_list{'unused'}{'nseq'}\";\n\ni\ f ($seq_list{'unused'}{'nseq'})\n {\n $prf\ =vtmpnam();\n \n `t_coffee -profile @pro\ file_list $arg_list -outfile=$prf -quiet`;\n \ $n=$seq_list{\"unused\"}{'nseq'};\n $new_seq=\ vtmpnam();\n $new_prf=vtmpnam();\n for (\ $a=0; $a<$n-1; $a++)\n {\n $s=$seq_list{\"unused\ \"}{$a};\n print STDERR \"\\nADD Sequence $s\";\\ n \n `seq_reformat -in $seq -action +lower +ke\ ep_name +extract_seq $s -output fasta_seq > $new_\ seq`;\n `t_coffee -profile $prf $new_seq $arg_li\ st -outfile=$new_prf`;\n `cp $new_prf $prf`;\n }\ \n $s=$seq_list{\"unused\"}{$a};\n `seq_\ reformat -in $seq -action +lower +keep_name +extra\ ct_seq $s -output fasta_seq > $new_seq`;\n @\ profile_list=($prf, $new_seq);\n }\n \n \ \nif ($run_name){$arg_list.=\" -run_name $run_nam\ e\";}\nelse \n {\n $in_seq=~/([\\w-]+)/;\n \ $arg_list.=\" -run_name $1\";\n }\nif ( $output){\ $arg_list.=\" -output $output \";}\n\n`t_coffee -p\ rofile @profile_list $arg_list`;\n\n\n&clean (@tmp\ _file_list);\n\n\nsub vtmpnam\n {\n my $tmp_fi\ le_name;\n $tmp_name_counter++;\n $tmp_file_\ name=\"tmp_file_$tmp_name_counter\\_Pid$$\";\n \ $tmp_file_list[$ntmp_file++]=$tmp_file_name;\n \ return $tmp_file_name;\n }\nsub clean\n {\n my \ @fl=@_;\n my $file;\n return;\n\n foreach $file\ ( @fl)\n {\n if ( -e $file){unlink($file)\ ;}\n }\n}\nsub extract_val_from_arg_list\n {\n\ my $arg=@_[0];\n my $arg_list=@_[1];\n m\ y $keep_flag=@_[2];\n #protect\n $arg_list=~\ s/\\s-/ \\@/g;\n $arg=~s/-/\\@/g;\n \n #s\ earch\n if ($arg eq \"^\")\n {\n $arg_list\ =~/^([^@]*)/;\n $val=$1;\n }\n else\n \ {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n \n #\ remove the parsed sequence if needed\n if ($val\ && $keep_flag ne \"KEEP\")\n {\n if ( $arg e\ q \"^\"){$arg_list=~s/$val/ /;}\n else {$arg_list=\ ~s/($arg [^@]*)/ /;}\n }\n \n #unprotect\n\ $arg_list=~s/\\@/-/g;\n $arg=~s/\\@/-/g;\n \ \n return $val, $arg_list;\n }\n\n","use En\ v;\n\n$BLAST_MAX_NRUNS=2;\n$EXIT_SUCCESS=0;\n$EXIT\ _FAILURE=1;\n\nuse Cwd;\n$REF_EMAIL=\"\";\n\n\n$tm\ p_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_generi\ c_method.pl\";\n\n$test=0;\nif ($test==1)\n {\n \ $SERVER=\"NCBI\";\n $query=$ARGV[0];\n $hi\ tf=$ARGV[1];\n %s=read_fasta_seq($query);\n \ @sl=keys(%s);\n &blast_xml2profile (\"xx\", $s{\ $sl[0]}{seq},$maxid,$minid,$mincov, $hitf);\n m\ yexit ($EXIT_FAILURE);\n }\n\nforeach $v(@ARGV){$\ cl.=\"$v \";}\n($mode)=&my_get_opt ( $cl, \"-mode=\ \",1,0);\n\n($A)=(&my_get_opt ( $cl, \"-name1=\",0\ ,0));\n($B)=(&my_get_opt ( $cl, \"-name2=\",0,0));\ \n($TMPDIR)=(&my_get_opt ( $cl, \"-tmpdir=\",0,0))\ ;\n($CACHE)=(&my_get_opt ( $cl, \"-cache=\",0,0));\ \n($SERVER)=((&my_get_opt ( $cl, \"-server=\",0,0)\ ));\n($EMAIL)=((&my_get_opt ( $cl, \"-email=\",0,0\ )));\n\nif (!$A){$A=\"A\";}\nif (!$B){$B=\"B\";}\n\ \n\nif (!$TMPDIR)\n {\n $HOME=$ENV{HOME};\n \ if ($ENV{TMP_4_TCOFFEE}){$TMPDIR=$ENV{TMP_4_TCOFF\ EE};}\n else{$TMPDIR=\"$HOME/.t_coffee/tmp/\";}\ \n }\nif ( ! -d $TMPDIR)\n {\n mkdir $TMPDIR;\ \n }\nif ( ! -d $TMPDIR)\n {\n print \"ERROR:\ Could not create temporary dir: $TMPDIR\\n\";\n \ myexit ($EXIT_FAILURE);\n }\n\n$EMAIL=~s/XEMAIL\ X/\\@/g;\nif (!$EMAIL)\n {\n if ($ENV{EMAIL_4_\ TCOFFEE}){$EMAIL=$ENV{EMAIL_4_TCOFFEE};}\n elsi\ f ($ENV{EMAIL}){$EMAIL=$ENV{EMAIL};}\n else {$E\ MAIL=$REF_EMAIL;}\n }\n\n($maxid,$minid,$mincov)=\ (&my_get_opt ( $cl, \"-maxid=\",0,0, \"-minid=\",0\ ,0,\"-mincov=\",0,0));\nif (!$cl=~/\\-maxid\\=/){$\ maxid=95;}\nif (!$cl=~/\\-minid\\=/){$minid=35;}\n\ if (!$cl=~/\\-mincov\\=/){$mincov=80;}\n\n\n\nif (\ $mode eq \"seq_msa\")\n {\n &seq2msa($mode,&my\ _get_opt ( $cl, \"-infile=\",1,1, \"-method=\",1,2\ , \"-param=\",0,0, \"-outfile=\",1,0));\n }\n\nel\ sif ( $mode eq \"thread_pair\")\n {\n &seq2thr\ ead_pair($mode,&my_get_opt ( $cl, \"-infile=\",1,1\ , \"-pdbfile1=\",1,1, \"-method=\",1,2,\"-param=\"\ ,0,0, \"-outfile=\",1,0, ));\n }\nelsif ( $mode e\ q \"pdbid_pair\")\n {\n &seq2pdbid_pair($mode,\ &my_get_opt ( $cl, \"-pdbfile1=\",1,0, \"-pdbfile2\ =\",1,0, \"-method=\",1,2,\"-param=\",0,0, \"-outf\ ile=\",1,0, ));\n }\nelsif ( $mode eq \"pdb_pair\\ ")\n {\n &seq2pdb_pair($mode,&my_get_opt ( $cl\ , \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \"-metho\ d=\",1,2,\"-param=\",0,0, \"-outfile=\",1,0, ));\n\ }\nelsif ( $mode eq \"profile_pair\")\n {\n \ &seq2profile_pair($mode,&my_get_opt ( $cl, \"-pro\ file1=\",1,1, \"-profile2=\",1,1, \"-method=\",1,2\ ,\"-param=\",0,0, \"-outfile=\",1,0, ));\n }\nels\ if ( $mode eq \"pdb_template\")\n {\n &blast2p\ db_template ($mode,&my_get_opt ( $cl, \"-infile=\"\ ,1,1, \"-database=\",1,0, \"-method=\",1,0, \"-out\ file=\",1,0));\n }\nelsif ( $mode eq \"profile_te\ mplate\")\n {\n &psiblast2profile_template ($m\ ode,&my_get_opt ( $cl, \"-infile=\",1,1, \"-databa\ se=\",1,0, \"-method=\",1,0, \"-outfile=\",1,0));\\ n }\nelsif ( $mode eq \"psiprofile_template\")\n \ {\n &psiblast2profile_template ($mode,&my_get_\ opt ( $cl, \"-infile=\",1,1, \"-database=\",1,0, \\ "-method=\",1,0, \"-outfile=\",1,0));\n }\nelsif \ ( $mode eq \"RNA_template\")\n {\n &seq2RNA_te\ mplate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\ \"-outfile=\",1,0));\n }\nelsif ( $mode eq \"tm_\ template\")\n {\n &seq2tm_template ($mode,&my_\ get_opt ( $cl, \"-infile=\",1,1,\"-arch=\",1,1,\"-\ psv=\",1,1, \"-outfile=\",1,0,));\n }\nelsif ( $m\ ode eq \"psitm_template\")\n {\n &seq2tm_templ\ ate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\"-\ arch=\",1,1,\"-psv=\",1,1, \"-outfile=\",1,0,));\n\ }\nelsif ( $mode eq \"ssp_template\")\n {\n \ &seq2ssp_template ($mode,&my_get_opt ( $cl, \"-inf\ ile=\",1,1,\"-seq=\",1,1,\"-obs=\",1,1, \"-outfile\ =\",1,0));\n }\nelsif ( $mode eq \"psissp_templat\ e\")\n {\n &seq2ssp_template ($mode,&my_get_op\ t ( $cl, \"-infile=\",1,1,\"-seq=\",1,1,\"-obs=\",\ 1,1, \"-outfile=\",1,0));\n }\nelsif ( $mode eq \\ "rna_pair\")\n{\n &seq2rna_pair($mode,&my_get_o\ pt ( $cl, \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \ \"-method=\",1,2,\"-param=\",0,0, \"-outfile=\",1,\ 0, ));\n}elsif ( $mode eq \"calc_rna_template\")\n\ {\n &calc_rna_template($mode,&my_get_opt ( $cl,\ \"-infile=\",1,1,\"-pdbfile=\",1,1, \"-outfile=\"\ ,1,0));\n}\nelse\n {\n print STDERR \"$mode is\ an unknown mode of tc_generic_method.pl [FATAL]\\\ n\";\n }\nmyexit ($EXIT_SUCCESS);\nsub seq2ssp_te\ mplate\n {\n my ($mode, $infile,$gor_seq,$gor_ob\ s,$outfile)=@_;\n my %s, %h;\n my $result;\n my\ (@profiles);\n &set_temporary_dir (\"set\",$infi\ le,\"seq.pep\");\n %s=read_fasta_seq (\"seq.pep\"\ );\n\n \n open (R, \">result.aln\");\n \n #pri\ nt stdout \"\\n\";\n foreach $seq (keys(%s))\n \ {\n \n open (F, \">seqfile\");\n $\ s{$seq}{seq}=uc$s{$seq}{seq};\n print (F \">$\ s{$seq}{name}\\n$s{$seq}{seq}\\n\");\n close \ (F);\n $lib_name=\"$s{$seq}{name}.ssp\";\n \ $lib_name=&clean_file_name ($lib_name);\n \ \n if ($mode eq \"ssp_template\"){&seq2gor_pr\ ediction ($s{$seq}{name},$s{$seq}{seq}, \"seqfile\\ ", $lib_name,$gor_seq, $gor_obs);}\n elsif ($\ mode eq \"psissp_template\")\n {\n &seq2msa_gor_\ prediction ($s{$seq}{name},$s{$seq}{seq},\"seqfile\ \", $lib_name,$gor_seq, $gor_obs);\n }\n \n \ if ( !-e $lib_name)\n {\n print STDERR (\"GORI\ V failed to compute the secondary structure of $s{\ $seq}{name} [FATAL:$mode/$method/$program]\\n\");\\ n myexit ($EXIT_FAILURE);\n }\n else\n {\n \ print stdout \"\\tProcess: >$s{$seq}{name} _E_ $\ lib_name \\n\";\n print R \">$s{$seq}{name} _E_ \ $lib_name\\n\";\n }\n unshift (@profiles, $li\ b_name);\n }\n close (R);\n &set_temporary_di\ r (\"unset\",$mode, $method,\"result.aln\",$outfil\ e, @profiles);\n}\n\nsub seq2tm_template\n {\n m\ y ($mode, $infile,$arch,$psv,$outfile)=@_;\n my %\ s, %h;\n my $result;\n my (@profiles);\n &set_t\ emporary_dir (\"set\",$infile,\"seq.pep\");\n %s=\ read_fasta_seq (\"seq.pep\");\n\n \n open (R, \"\ >result.aln\");\n \n #print stdout \"\\n\";\n f\ oreach $seq (keys(%s))\n {\n open (F, \">s\ eqfile\");\n print (F \">$s{$seq}{name}\\n$s{\ $seq}{seq}\\n\");\n close (F);\n $lib_na\ me=\"$s{$seq}{name}.tmp\";\n $lib_name=&clean\ _file_name ($lib_name);\n\n if ($mode eq \"tm\ _template\")\n {\n &safe_system (\"t_coffee -oth\ er_pg fasta_seq2hmmtop_fasta.pl -in=seqfile -out=$\ lib_name -arch=$arch -psv=$psv\");\n }\n elsi\ f ( $mode eq \"psitm_template\")\n {\n &seq2msa_\ tm_prediction ($s{$seq}{name},$s{$seq}{seq},\"seqf\ ile\", $lib_name,$arch, $psv);\n }\n if ( !-e\ $lib_name)\n {\n print STDERR (\"RNAplfold fail\ ed to compute the secondary structure of $s{$seq}{\ name} [FATAL:$mode/$method/$program]\\n\");\n my\ exit ($EXIT_FAILURE);\n }\n else\n {\n prin\ t stdout \"\\tProcess: >$s{$seq}{name} _T_ $lib_na\ me\\n\";\n print R \">$s{$seq}{name} _T_ $lib_na\ me\\n\";\n }\n unshift (@profiles, $lib_name)\ ;\n }\n close (R);\n &set_temporary_dir (\"un\ set\",$mode, $method,\"result.aln\",$outfile, @pro\ files);\n}\n\nsub seq2RNA_template\n {\n my ($mo\ de, $infile,$outfile)=@_;\n my %s, %h, ;\n my $r\ esult;\n my (@profiles);\n &set_temporary_dir (\\ "set\",$infile,\"seq.pep\");\n %s=read_fasta_seq \ (\"seq.pep\");\n\n \n open (R, \">result.aln\");\ \n \n #print stdout \"\\n\";\n foreach $seq (ke\ ys(%s))\n {\n open (F, \">seqfile\");\n \ print (F \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\"\ );\n close (F);\n $lib_name=\"$s{$seq}{n\ ame}.rfold\";\n $lib_name=&clean_file_name ($\ lib_name);\n &safe_system (\"t_coffee -other_\ pg RNAplfold2tclib.pl -in=seqfile -out=$lib_name\"\ );\n \n if ( !-e $lib_name)\n {\n prin\ t STDERR (\"RNAplfold failed to compute the second\ ary structure of $s{$seq}{name} [FATAL:$mode/$meth\ od/$program]\\n\");\n myexit ($EXIT_FAILURE);\n \ }\n else\n {\n print stdout \"\\tProcess: >\ $s{$seq}{name} _F_ $lib_name\\n\";\n print R \">\ $s{$seq}{name} _F_ $lib_name\\n\";\n }\n unsh\ ift (@profiles, $lib_name);\n }\n close (R);\n\ &set_temporary_dir (\"unset\",$mode, $method,\"r\ esult.aln\",$outfile, @profiles);\n}\n\nsub psibla\ st2profile_template \n {\n my ($mode, $infile, $\ db, $method, $outfile)=@_;\n my %s, %h, ;\n my (\ $result,$psiblast_output,$profile_name,@profiles);\ \n \n &set_temporary_dir (\"set\",$infile,\"seq.\ pep\");\n %s=read_fasta_seq (\"seq.pep\");\n ope\ n (R, \">result.aln\");\n \n #print stdout \"\\n\ \";\n foreach $seq (keys(%s))\n {\n open \ (F, \">seqfile\");\n print (F \">$A\\n$s{$seq\ }{seq}\\n\");\n close (F);\n $psiblast_o\ utput=&run_blast ($s{$seq}{name},$method, $db, \"s\ eqfile\",\"outfile\");\n if ( -e $psiblast_ou\ tput)\n {\n %profile=blast_xml2profile($s{$seq}{\ name}, $s{$seq}{seq},$maxid, $minid,$mincov,$psibl\ ast_output);\n unlink ($psiblast_output);\n \n\ $profile_name=\"$s{$seq}{name}.prf\";\n $prof\ ile_name=&clean_file_name ($profile_name);\n uns\ hift (@profiles, $profile_name);\n output_profil\ e ($profile_name, %profile);\n print stdout \"\\\ tProcess: >$s{$seq}{name} _R_ $profile_name [$prof\ ile{n} Seq.] [$SERVER/blast/$db][$CACHE_STATUS]\\n\ \";\n print R \">$s{$seq}{name} _R_ $profile_nam\ e\\n\";\n }\n }\n close (R);\n &set_temporary\ _dir (\"unset\",$mode, $method,\"result.aln\",$out\ file, @profiles);\n}\n\nsub blast2pdb_template \n \ {\n my ($mode, $infile, $db, $method, $outfile)=\ @_;\n my %s, %h, ;\n my ($result,$blast_output);\ \n &set_temporary_dir (\"set\",$infile,\"seq.pep\\ ");\n %s=read_fasta_seq (\"seq.pep\");\n open (R\ , \">result.aln\");\n \n \n #print stdout \"\\n\\ ";\n foreach $seq (keys(%s))\n {\n open (\ F, \">seqfile\");\n print (F \">$A\\n$s{$seq}\ {seq}\\n\");\n close (F);\n \n $bla\ st_output=&run_blast ($s{$seq}{name},$method, $db,\ \"seqfile\",\"outfile\");\n %p=blast_xml2pro\ file($s{$seq}{name}, $s{$seq}{seq},$maxid, $minid,\ $mincov,$blast_output);\n unlink ($blast_outp\ ut);\n if ($p{n}>1)\n {\n $pdbid=id2pdbid($\ p{1}{identifyer});\n if ( length ($pdbid)>5){$pd\ bid=id2pdbid($p{1}{definition});}\n \n print R\ \">$s{$seq}{name} _P_ $pdbid\\n\";\n print stdo\ ut \"\\tProcess: >$s{$seq}{name} _P_ $pdbid [$SERV\ ER/blast/$db][$CACHE_STATUS]\\n\";\n }\n else\ \n {\n print R \">$s{$seq}{name}\\n\";\n print\ stdout \"\\tProcess: >$s{$seq}{name} _P_ No Templ\ ate Found [$SERVER/blast/$db][$CACHE_STATUS]\\n\";\ \n }\n }\n close (R);\n &set_temporary_dir (\\ "unset\",$mode, $method,\"result.aln\",$outfile);\\ n}\nsub blast_msa\n {\n my ($infile,$outfile)=\ @_;\n my ($a, %seq);\n %s1=&read_fasta_seq (\ $infile);\n foreach $s (keys (%s1))\n {\n \ $i=$s1{$s}{order};\n $s{$i}{name}=$s;\n $s{$i}{seq\ }=$s1{$s}{seq};\n $s{$i}{len}=length( $s{$i}{seq})\ ;\n $s{n}++;\n }\n `formatdb -i $infile`;\\ n `blastpgp -i $infile -d $infile -m7 -j4 > io`\ ;\n &set_blast_type (\"io\");\n \n %FB=&x\ ml2tag_list (\"io\", \"BlastOutput\");\n \n \ open (F, \">$outfile\");\n print F \"! TC_LIB_F\ ORMAT_01\\n\";\n print F \"$s{n}\\n\";\n for\ ( $a=0; $a<$s{n}; $a++)\n {\n print F \"$s{$\ a}{name} $s{$a}{len} $s{$a}{seq}\\n\";\n }\n \ for ( $a=0; $a<$FB{n}; $a++)\n {\n %p=blas\ t_xml2profile ($s{$a}{name}, $s{$a}{seq},100, 0, 0\ , $FB{$a}{body});\n for ($b=1; $b<$p{n}; $b++)\n \ {\n my $l=length ($p{$b}{Qseq});\n my $hi\ t=$p{$b}{definition};\n my $Qstart=$p{$b}{Qsta\ rt};\n my $Hstart=$p{$b}{Hstart};\n my $id\ entity=$p{$b}{identity};\n my @lrQ=split (//,$\ p{$b}{Qseq});\n my @lrH=split (//,$p{$b}{Hseq}\ );\n my $i= $s1{$s{$a}{name}}{order}+1;\n \ my $j= $s1{$hit}{order}+1;\n #if ( $j==$i){nex\ t;}\n printf F \"# %d %d\\n\", $i, $j;\n #\ print F \"\\n$p{$b}{Qseq} ($Qstart)\\n$p{$b}{Hs\ eq} ($Hstart)\";\n for ($c=0; $c<$l; $c++)\n \ {\n my $rQ=$lrQ[$c];\n my $rH=$lrH[$c];\n \ my $n=0;\n \n if ($rQ ne \"-\"){$n++, $Qstart++;\ }\n if ($rH ne \"-\"){$n++; $Hstart++;}\n \n if\ ( $n==2)\n {\n printf F \"\\t%d %d %d\\n\\ ", $Qstart-1, $Hstart-1,$identity;\n }\n \ }\n }\n }\n print F \"! SEQ_1_TO_N\\n\";\ \n close (F);\n return $output;\n \n }\n\n\ sub seq2msa\n {\n my ($mode, $infile, $method,\ $param, $outfile)=@_;\n &set_temporary_dir (\"\ set\",$infile,\"seq.pep\");\n $param.=\" >/dev/\ null 2>&1 \";\n \n #make sure test.pep is in\ FASTA\n &safe_system (\"t_coffee -other_pg seq\ _reformat -in seq.pep -output fasta_seq > x\");\n \ `mv x seq.pep`;\n \n if ( $method eq \"bl\ astpgp\")\n {\n &blast_msa (\"seq.pep\", \"re\ sult.aln\");\n }\n elsif ( $method eq \"mu\ scle\")\n {\n `muscle -in seq.pep -out result\ .aln $param`;\n }\n elsif ( $method eq \"p\ robcons\")\n {\n `probcons seq.pep >result.al\ n 2>/dev/null`;\n }\n elsif ( $method eq \\ "mafft\")\n {\n `mafft --quiet --localpair --\ maxiterate 1000 seq.pep> result.aln 2>/dev/null`\\ n }\n elsif ( $method=~/prank/)\n {\n\ `$method -d=seq.pep -o=result.aln -quiet 2>/dev/n\ ull`;\n `mv result.aln.1.fas result.aln`;\n }\ \n else\n {\n `$method -infile=seq.pep -ou\ tfile=result.aln`;\n }\n \n &set_tempor\ ary_dir (\"unset\",$mode, $method,\"result.aln\",$\ outfile);\n myexit ($EXIT_SUCCESS);\n }\n\nsub\ seq2thread_pair\n {\n my ($mode, $infile, $pd\ bfile1, $method, $param, $outfile)=@_;\n &set_t\ emporary_dir (\"set\",$infile,\"seq.pep\",$pdbfile\ 1,\"struc.pdb\");\n if ($method eq \"fugueali\"\ )\n {\n #Env Variable that need to be defined\ for Fugue\n if (!$ENV{FUGUE_LIB_LIST}){$ENV{FUGUE\ _LIB_LIST}=\"DUMMY\";}\n if (!$ENV{HOMSTRAD_PATH})\ {$ENV{HOMSTRAD_PATH}=\"DUMMY\";}\n if (!$ENV{HOM\ S_PATH}){$ENV{HOMS_PATH}=\"DUMMY\";}\n \n `joy str\ uc.pdb >x 2>x`;\n &check_file(\"struc.tem\", \"Joy\ failed [FATAL:$program/$method]\");\n `melody -t \ struc.tem >x 2>x`;\n &check_file(\"struc.tem\", \"\ Melody failed [FATAL:$program/$method]\");\n `fugu\ eali -seq seq.pep -prf struc.fug -print > tmp_resu\ lt.aln`;\n \n &check_file(\"tmp_result.aln\", \"Fu\ gue failed [FATAL:$program/$method]\");\n &safe_sy\ stem (\"t_coffee -other_pg seq_reformat -in tmp_re\ sult.aln -output fasta_aln >result.aln\");\n \ }\n elsif ( $method eq \"t_coffee\")\n {\n\ &safe_system (\"t_coffee -in Pstruc.pdb Sseq.pep \ Mslow_pair -outfile result.aln -quiet\");\n }\ \n else\n {\n &safe_system (\"$method -inf\ ile=seq.pep -pdbfile1=struc.pdb -outfile=result.al\ n $param>x 2>x\");\n }\n &set_temporary_di\ r (\"unset\",$mode,$method,\"result.aln\",$outfile\ );\n myexit ($EXIT_SUCCESS);\n }\nsub seq2pdbi\ d_pair\n {\n my ($mode, $pdbfile1, $pdbfile2, \ $method, $param, $outfile)=@_;\n my ($name);\n\\ n \n &set_temporary_dir (\"set\");\n $nam\ e=$pdbfile1.\" \".$pdbfile2;\n\n if ( &cache\ _file(\"GET\",\"\",\"$name\",\"$method\",\"dali\",\ $outfile,\"EBI\"))\n {return $outfile;}\n \ else\n {\n if ($method eq \"dalilite\")\n {\ \n $pdbfile1=~/(....)(.)/;\n $id1=$1; $c1=\ $2;\n \n $pdbfile2=~/(....)(.)/;\n $id\ 2=$1; $c2=$2;\n \n $command=\"t_coffee -ot\ her_pg dalilite.pl --pdb1 $id1 --chainid1 $c1 --pd\ b2 $id2 --chainid2 $c2 --email=$EMAIL >dali_stder\ r 2>dali_stderr\";\n $dali=`$command`;\n \\ n open (F, \"dali_stderr\");\n while ()\ \n {\n if ( /JobId: dalilite-(\\S+)/)\n {\\ n $jobid=$1;\n }\n }\n close (F);\n \ unlink (\"dali_stderr\");\n \n $output\ 1=\"dalilite-$jobid.txt\";\n if ( -e $output1)\ \n {\n unlink ($output1);\n &url2file (\"h\ ttp://www.ebi.ac.uk/Tools/es/cgi-bin/jobresults.cg\ i/dalilite/dalilite-$jobid/aln.html\", \"output2\"\ );\n \n if ( -e \"output2\")\n {\n my ($\ seq1, $seq2);\n $seq1=$seq2=\"\";\n \n \ open (F, \"output2\");\n while ()\n \ {\n $l=$_;\n if ( $l=~/Query\\s+(\\S+)/)\\ n {\n $seq1.=$1;\n }\n elsif ( $l=\ ~/Sbjct\\s+(\\S+)/)\n {\n $seq2.=$1;\n \ }\n }\n close (F);\n unlink (\\ "output2\");\n if ($seq1 ne \"\" && $seq2 ne \ \"\")\n {\n $output3=\">$A\\n$seq1\\n>$B\\ \n$seq2\\n\";\n $output3=~s/\\./-/g;\n open (F\ , \">result.aln\");\n print F \"$output3\";\n \ close (F);\n }\n }\n }\n }\n \ }\n &cache_file(\"SET\",\"\",\"$name\",\"$met\ hod\",\"dali\",\"result.aln\",\"EBI\");\n &set_\ temporary_dir (\"unset\",$mode, $method, \"result.\ aln\",$outfile);\n myexit ($EXIT_SUCCESS);\n }\ \nsub seq2pdb_pair\n {\n my ($mode, $pdbfile1,\ $pdbfile2, $method, $param, $outfile)=@_;\n \n\ &set_temporary_dir (\"set\",$pdbfile1,\"pdb1.p\ db\",$pdbfile2,\"pdb2.pdb\");\n if ($method eq \ \"t_coffee\")\n {\n &safe_system (\"t_coffee \ -in Ppdb1.pdb Ppdb2.pdb -quiet -outfile=result.aln\ \");\n }\n elsif ( $method eq \"TMalign\")\ \n {\n if ( &safe_system (\"TMalign pdb1.pdb \ pdb2.pdb >tmp1\")==$EXIT_SUCCESS)\n {\n `tai\ l -4 tmp1 > tmp2`;\n \n open (F, \"tmp2\")\ ;\n while ()\n {\n unshift(@l, $_);\\ n }\n close (F);\n open (F, \">resul\ t.aln\");\n $l[3]=~s/[^a-zA-Z0-9-]/\\-/g;\n \ $l[1]=~s/[^a-zA-Z0-9-]/\\-/g;\n print F \">$\ A\\n$l[3]\\n>$B\\n$l[1]\\n\";\n close (F);\n \ }\n else\n {\n print \"ERROR: TMalign faile\ d to align the considered structures[tc_generic_me\ thod.pl]\\n\";\n `rm result.aln >/dev/null 2>/\ dev/null`;\n }\n }\n elsif ( $method eq \ \"mustang\")\n {\n if ( &safe_system (\"musta\ ng -i pdb1.pdb pdb2.pdb -F fasta >/dev/null 2>/dev\ /null\")==$EXIT_SUCCESS)\n {\n `mv results.a\ fasta result.aln`;\n }\n else\n {\n print \ \"ERROR: mustang failed to align the considered st\ ructures[tc_generic_method.pl]\\n\";\n `rm res\ ult.aln >/dev/null 2>/dev/null`;\n }\n }\n \ else\n {\n if ( &safe_system (\"$method -p\ dbfile1=pdb1.pep -pdbfile2=pdb2.pdb -outfile=resul\ t.aln $param>x 2>x\")==$EXIT_SUCCESS)\n {\n \ `mv results.afasta result.aln`;\n }\n else\n {\ \n print \"ERROR: $method failed to align the \ considered structures[tc_generic_method.pl]\\n\";\\ n `rm result.aln >/dev/null 2>/dev/null`;\n \ }\n }\n &set_temporary_dir (\"unset\",$mod\ e, $method, \"result.aln\",$outfile);\n myexit \ ($EXIT_SUCCESS);\n }\n\nsub seq2profile_pair\n {\ \n my ($mode, $profile1, $profile2, $method, $p\ aram, $outfile)=@_;\n \n \n if ($method e\ q \"clustalw\")\n {\n &set_temporary_dir (\"s\ et\",$profile1,\"prf1.aln\",$profile2,\"prf2.aln\"\ );\n `clustalw -profile1=prf1.aln -profile2=prf2.a\ ln -outfile=result.aln`;\n &set_temporary_dir (\"u\ nset\",$mode, $method, \"result.aln\",$outfile);\n\ }\n elsif ( $method eq \"hhalign\")\n \ {\n hhalign ( $profile1,$profile2,$outfile,$para\ m);\n }\n else\n {\n \n `$method -pro\ file1=prf1.aln -profile2=prf2.aln -outfile=result.\ aln $param>x 2>x`;\n }\n \n myexit ($EXI\ T_SUCCESS);\n }\n\nsub pg_is_installed\n {\n \ my @ml=@_;\n my $r, $p, $m;\n my $supported=\ 0;\n \n my $p=shift (@ml);\n $r=`which $p\ 2>/dev/null`;\n if ($r eq \"\"){return 0;}\n \ else {return 1;}\n }\nsub check_pg_is_installed\ \n {\n my @ml=@_;\n my $r=&pg_is_installed \ (@ml);\n if (!$r)\n {\n print STDERR \"\\n\ Program $p Supported but Not Installed on your sys\ tem [FATAL:tc_generic_method]\\n\";\n myexit ($EXI\ T_FAILURE);\n }\n else\n {\n return 1\ ;\n }\n }\nsub set_temporary_dir\n {\n m\ y @list=@_;\n my $dir_mode, $a, $mode, $method;\ \n\n $dir_mode=shift (@list);\n\n \n if (\ $dir_mode eq \"set\")\n {\n $initial_dir=cwd\ ();\n if ( !$tmp_dir)\n {\n srand;\n $ra\ nd=rand (100000);\n $tmp_dir=\"$TMPDIR/tmp4tco\ ffee_profile_pair_dir_$$_P_$rand\";\n }\n if ( !\ -d $tm_dir)\n {\n `mkdir $tmp_dir`;\n }\n \ \n for ( $a=0; $a<=$#list; $a+=2)\n {\n `cp\ $list[$a] $tmp_dir/$list[$a+1]`;\n }\n chdi\ r $tmp_dir;\n }\n elsif ( $dir_mode eq \"u\ nset\")\n {\n $mode=shift (@list);\n $method=\ shift (@list);\n \n if (!-e $list[0])\n {\n \ print STDERR (\"Program $method failed to produce \ $list[1] [FATAL:$mode/$method/$program]\\n\");\n \ myexit ($EXIT_FAILURE);\n }\n else\n {\n \ chdir $initial_dir;\n # `t_coffee -other_pg \ seq_reformat -in $tmp_dir/$list[0] -output fasta_a\ ln -out $tmp_dir/result2.aln`;\n `cp $tmp_dir/\ $list[0] $tmp_dir/result2.aln`;\n if ( $list[1\ ] eq \"stdout\")\n {\n open (F, \"$tmp_dir/\ result2.aln\");\n while (){print $_;}close(F);\ \n }\n else\n {\n `mv $tmp_dir/re\ sult2.aln $list[1]`;\n }\n shift (@list)\ ; shift (@list);\n foreach $f (@list)\n \ {\n `mv $tmp_dir/$f .`;\n }\n }\n }\\ n }\nsub clean_dir\n {\n my $dir=@_[0];\n \ if ( !-d $dir){return ;}\n elsif (!($dir=~/tmp/\ )){return ;}#safety check 1\n elsif (($dir=~/\\\ */)){return ;}#safety check 2\n else\n {\n\ `rm -rf $dir`;\n }\n return;\n }\n\nsub \ myexit\n {\n my $code=@_[0];\n &clean_dir (\ $tmp_dir);\n exit ($code);\n }\n\nsub my_get_o\ pt\n {\n my @list=@_;\n my $cl, $a, $argv, \ @argl;\n \n @argl=();\n $cl=shift @list;\\ n for ( $a=0; $a<=$#list; $a+=3)\n {\n $op\ tion=$list[$a];\n $optional=$list[$a+1];\n $status\ =$list[$a+2];\n $argv=\"\";\n if ($cl=~/$option(\\\ S+)/){$argv=$1;}\n @argl=(@argl,$argv);\n \n \n #$\ optional:0=>optional\n #$optional:1=>must be set\n\ #$status: 0=>no requirement\n #$status: 1=>must b\ e an existing file\n #$status: 2=>must be an insta\ lled package\n \n\n if ($optional==0){;}\n elsif (\ $optional==1 && $argv eq \"\")\n {\n print \ STDERR \"ERROR: Option $option must be set [FATAL:\ $program/$mode/$method]\\n\";\n myexit ($EXIT_\ FAILURE);\n }\n if ($status==0){;}\n elsif ($sta\ tus ==1 && $argv ne \"\" && !-e $argv)\n {\n \ print STDERR \"ERROR: File $argv must exist [FATA\ L:$program/$mode/$method]\\n\";\n myexit ($EXI\ T_FAILURE);\n }\n elsif ( $status==2 && $argv ne\ \"\" && &check_pg_is_installed ($argv)==0)\n {\\ n print STDERR \"ERROR: $argv is not installed\ [FATAL:$program/$mode/$method]\\n\";\n myexit\ ($EXIT_FAILURE);\n }\n }\n\n return @ar\ gl;\n }\n\nsub check_file \n {\n my ($file,\ $msg)=@_;\n\n if ( !-e $file)\n {\n print\ \"\\n$msg\\n\";\n myexit ($EXIT_FAILURE);\n \ }\n }\nsub hhalign\n {\n my ($aln1, $aln2, \ $outfile, $param)=@_;\n my $h1, $h2;\n \n \ $h{0}{index}=0;\n $h{1}{index}=1;\n \n $\ h{0}{aln}=$aln1;\n $h{1}{aln}=$aln2;\n\n \n\n\ %{$h{0}}=aln2psi_profile (%{$h{0}});\n %{$h\ {1}}=aln2psi_profile (%{$h{1}});\n\n $param=~s/\ #S/ /g;\n $param=~s/#M/\\-/g;\n $param=~s/#E\ /\\=/g;\n \n\n \n $command=\"hhalign -i $\ h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp -rank 1 -\ mapt 0 $param\";\n `$command`;\n \n # `hha\ lign -i $h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp \ -rank 1 -mapt 0 -gapf 0.8 -gapg 0.8`;\n \n\n \ # To run global use the following\n \n open\ (I, \"$outfile.tmp\");\n open (O, \">$outfile\\ ");\n $h{0}{cons}=s/\\./x/g;\n $h{1}{cons}=s\ /\\./x/g;\n\n print O \"! TC_LIB_FORMAT_01\\n2\\ \n$h{0}{name} $h{0}{len} $h{0}{seq}\\n$h{1}{name} \ $h{1}{len} $h{1}{seq}\\n#1 2\\n\";\n \n whil\ e ()\n {\n if (/(\\d+)\\s+(\\d+)\\s+(\\d+)\ /)\n {\n print O \"\\t$h{0}{$1}\\t$h{1}{$2}\\ \t$3\\n\";\n }\n }\n print O \"! SEQ_1_T\ O_N\\n\";\n\n close (O);\n close (I);\n }\n\ \nsub aln2psi_profile\n {\n my (%h)=@_;\n m\ y ($aln,$i,$hv, $a, @c, $n);\n \n $i=$h{index\ };\n $aln=$h{aln};\n\n `cp $aln $$.hhh_aln`;\ \n $command=\"t_coffee -other_pg seq_reformat -\ in $aln -output hasch\";\n $hv=`$command`;chomp\ ($hv);\n \n $h{a2m}=\"$tmp/$hv.tmp4hhpred.a\ 2m\";\n $h{a3m}=\"$tmp/$hv.tmp4hhpred.a3m\";\n \ if ( -e $h{a3m}){;}\n else\n {\n `hhcon\ sensus -M 50 -i $h{aln} -oa2m $h{a2m}`;\n if (!-e\ $h{a2m})\n {\n print STDERR \"Program tc_ge\ neric_method.pl FAILED to run:\\n\\thhconsensus -\ M 50 -i $h{aln} -oa2m $h{a2m}\";\n myexit ($EX\ IT_FAILURE);\n }\n \n `hhconsensus -M 50 -i $h{\ aln} -oa3m $h{a3m}`;\n if (!-e $h{a3m})\n {\n \ print STDERR \"Program tc_generic_method.pl FAIL\ ED to run:\\n\\thhconsensus -M 50 -i $h{aln} -oa3\ m $h{a3m}\";\n myexit ($EXIT_FAILURE);\n }\n\ `buildali.pl $h{a3m} -n 1`;\n }\n \\ n \n $h{a2m_seq}=`head -n 2 $h{a2m} | grep -\ v \">\"`;chomp ($h{a2m_seq});\n $h{a3m_seq}=`he\ ad -n 2 $h{a3m} | grep -v \">\"`;chomp ($h{a3m_seq\ });\n $h{cons}=$h{a2m_seq};\n $h{seq}=`head \ -n 2 $h{aln} | grep -v \">\"`;chomp ($h{seq});\n \ \n \n\n @c=split (//, $h{cons});\n $h{l\ en}=$#c+1;\n for ($n=0,$a=0, $b=0; $a<$h{len};$\ a++)\n {\n if ( $c[$a]=~/[A-Z]/)\n {\n \ $h{++$n}=++$b;\n\n }\n elsif ( $c[$a]=~/[a-z\\.]\ /)\n {\n ++$b;\n }\n }\n \n $na\ me=`head -n 2 $h{aln} | grep \">\"`;\n $name=~/\ \\>(\\S+)/;\n $h{name}=$1;\n \n `cp $h{a2\ m} $i.a2m`;\n `cp $h{a3m} $i.a3m`;\n `cp $h{\ aln} $i.hh_aln`;\n \n return %h;\n }\n\nsub\ read_fasta_seq \n {\n my $f=@_[0];\n my %h\ seq;\n my (@seq, @com, @name);\n my ($a, $s,\ $nseq);\n\n open (F, $f);\n while ()\n \ {\n $s.=$_;\n }\n close (F);\n\n \n \ @name=($s=~/>(\\S*).*\\n[^>]*/g);\n \n @s\ eq =($s=~/>.*.*\\n([^>]*)/g);\n @com =($s=~/>\\\ S*(.*)\\n([^>]*)/g);\n\n \n $nseq=$#name+1;\\ n \n for ($a=0; $a<$nseq; $a++)\n {\n m\ y $s;\n my $n=$name[$a];\n $hseq{$n}{name}=$n;\n $\ seq[$a]=~s/[^A-Za-z]//g;\n $hseq{$n}{order}=$a;\n \ $hseq{$n}{seq}=$seq[$a];\n $hseq{$n}{com}=$com[$a]\ ;\n \n }\n return %hseq;\n }\n\nsub file_\ contains \n {\n my ($file, $tag, $max)=(@_);\n\ my ($n);\n $n=0;\n \n if ( !-e $file \ && ($file =~/$tag/)) {return 1;}\n elsif ( !-e \ $file){return 0;}\n else \n {\n open (FC, \ \"$file\");\n while ( )\n {\n if ( ($_=~\ /$tag/))\n {\n close (FC);\n return 1;\n \ }\n elsif ($max && $n>$max)\n {\n \ close (FC);\n return 0;\n }\n $n++;\n \ }\n }\n close (FC);\n return 0;\n }\n\ \n \nsub file2string\n {\n my $f=@_[0];\ \n my $string, $l;\n open (F,\"$f\");\n w\ hile ()\n {\n\n $l=$_;\n #chomp ($l);\n $s\ tring.=$l;\n }\n close (F);\n $string=~\ s/\\r\\n//g;\n $string=~s/\\n//g;\n return $\ string;\n }\n\n\nsub my_get_opt\n {\n my @lis\ t=@_;\n my $cl, $a, $argv, @argl;\n \n @a\ rgl=();\n $cl=shift @list;\n for ( $a=0; $a<\ =$#list; $a+=3)\n {\n $option=$list[$a];\n $o\ ptional=$list[$a+1];\n $status=$list[$a+2];\n $arg\ v=\"\";\n if ($cl=~/$option(\\S+)/){$argv=$1;}\n @\ argl=(@argl,$argv);\n \n \n #$optional:0=>optional\ \n #$optional:1=>must be set\n #$status: 0=>no req\ uirement\n #$status: 1=>must be an existing file\n\ #$status: 2=>must be an installed package\n \n\n \ if ($optional==0){;}\n elsif ( $optional==1 && $ar\ gv eq \"\")\n {\n print STDERR \"ERROR: Opti\ on $option must be set [FATAL:$program/$mode/$meth\ od]\\n\";\n myexit ($EXIT_FAILURE);\n }\n if\ ($status==0){;}\n elsif ($status ==1 && $argv ne \ \"\" && !-e $argv)\n {\n print STDERR \"ERRO\ R: File $argv must exist [FATAL:$program/$mode/$me\ thod]\\n\";\n myexit ($EXIT_FAILURE);\n }\n \ elsif ( $status==2 && $argv ne \"\" && &check_pg_i\ s_installed ($argv)==0)\n {\n print STDERR \\ "ERROR: $argv is not installed [FATAL:$program/$mo\ de/$method]\\n\";\n myexit ($EXIT_FAILURE);\n \ }\n }\n\n return @argl;\n }\n\nsub ta\ g2value \n {\n \n my $tag=(@_[0]);\n my \ $word=(@_[1]);\n my $return;\n \n $tag=~/\ $word=\"([^\"]+)\"/;\n $return=$1;\n return \ $return;\n }\n \nsub hit_tag2pdbid\n {\n \ my $tag=(@_[0]);\n my $pdbid;\n \n $t\ ag=~/id=\"(\\S+)\"/;\n $pdbid=$1;\n $pdbid=~\ s/_//;\n return $pdbid;\n }\nsub id2pdbid \n \ {\n my $in=@_[0];\n my $id;\n \n $in=~\ /(\\S+)/;\n $id=$in;\n \n if ($id =~/pdb/\ )\n {\n $id=~/pdb(.*)/;\n $id=$1;\n }\n \ $id=~s/[|��_]//g;\n return $id;\n }\nsu\ b set_blast_type \n {\n my $file =@_[0];\n \ if (&file_contains ($file,\"EBIApplicationResult\"\ ,100)){$BLAST_TYPE=\"EBI\";}\n elsif (&file_con\ tains ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TY\ PE=\"NCBI\";}\n else\n {\n $BLAST_TYPE=\"\\ ";\n }\n return $BLAST_TYPE;\n }\nsub bla\ st_xml2profile \n {\n my ($name,$seq,$maxid, $\ minid, $mincov, $file)=(@_);\n my (%p, $a, $str\ ing, $n);\n \n\n\n if ($BLAST_TYPE eq \"EBI\\ " || &file_contains ($file,\"EBIApplicationResult\\ ",100)){%p=ebi_blast_xml2profile(@_);}\n elsif \ ($BLAST_TYPE eq \"NCBI\" || &file_contains ($file,\ \"NCBI_BlastOutput\",100)){%p=ncbi_blast_xml2profi\ le(@_);}\n else \n {\n print \"***********\ * ERROR: Blast Returned an unknown XML Format ****\ ******************\";\n myexit ($EXIT_FAILURE);\n \ }\n for ($a=0; $a<$p{n}; $a++)\n {\n \ my $name=$p{$a}{name};\n $p{$name}{seq}=$p{$a}{seq\ };\n }\n return %p;\n }\nsub ncbi_blast_x\ ml2profile \n {\n my ($name,$seq,$maxid, $mini\ d, $mincov, $string)=(@_);\n my ($L,$l, $a,$b,$\ c,$d,$nhits,@identifyerL);\n \n \n $seq=~\ s/[^a-zA-Z]//g;\n $L=length ($seq);\n \n \ %hit=&xml2tag_list ($string, \"Hit\");\n \n \ \n for ($nhits=0,$a=0; $a<$hit{n}; $a++)\n \ {\n my ($ldb,$id, $identity, $expectation, $start\ , $end, $coverage, $r);\n my (%ID,%DE,%HSP);\n \n \ $ldb=\"\";\n\n %ID=&xml2tag_list ($hit{$a}{body}, \ \"Hit_id\");\n $identifyer=$ID{0}{body};\n \n %DE=\ &xml2tag_list ($hit{$a}{body}, \"Hit_def\");\n $de\ finition=$DE{0}{body};\n \n %HSP=&xml2tag_list ($h\ it{$a}{body}, \"Hsp\");\n for ($b=0; $b<$HSP{n}; $\ b++)\n {\n my (%START,%END,%E,%I,%Q,%M);\n\n\ \n %START=&xml2tag_list ($HSP{$b}{body}, \"H\ sp_query-from\");\n %HSTART=&xml2tag_list ($HS\ P{$b}{body}, \"Hsp_hit-from\");\n \n %LEN=\ &xml2tag_list ($HSP{$b}{body}, \"Hsp_align-len\"\ );\n %END= &xml2tag_list ($HSP{$b}{body}, \"H\ sp_query-to\");\n %HEND= &xml2tag_list ($HSP{\ $b}{body}, \"Hsp_hit-to\");\n %E=&xml2tag_list\ ($HSP{$b}{body}, \"Hsp_evalue\");\n %I=&x\ ml2tag_list ($HSP{$b}{body}, \"Hsp_identity\")\ ;\n %Q=&xml2tag_list ($HSP{$b}{body}, \"Hs\ p_qseq\");\n %M=&xml2tag_list ($HSP{$b}{bo\ dy}, \"Hsp_hseq\");\n \n for ($e=0; $e<$Q{\ n}; $e++)\n\n {\n $qs=$Q{$e}{body};\n $ms=\ $M{$e}{body};\n \n $expectation=$E{$e}{body};\n \ $identity=($LEN{$e}{body}==0)?0:$I{$e}{body}/$LEN\ {$e}{body}*100;\n $start=$START{$e}{body};\n $en\ d=$END{$e}{body};\n $Hstart=$HSTART{$e}{body};\n \ $Hend=$HEND{$e}{body};\n \n $coverage=(($end-$st\ art)*100)/$L;\n\n \n if ($identity>$maxid || $ide\ ntity<$minid || $coverage<$mincov){next;}\n @lr1=\ (split (//,$qs));\n @lr2=(split (//,$ms));\n $l=\ $#lr1+1;\n for ($c=0;$c<$L;$c++){$p[$nhits][$c]=\\ "-\";}\n for ($d=0,$c=0; $c<$l; $c++)\n {\n \ $r=$lr1[$c];\n if ( $r=~/[A-Za-z]/)\n \ {\n \n $p[$nhits][$d + $start-1]=$lr2[$c];\\ n $d++;\n }\n }\n $Qseq[$nhits]=$qs;\\ n $Hseq[$nhits]=$ms;\n $QstartL[$nhits]=$start;\\ n $HstartL[$nhits]=$Hstart;\n $identityL[$nhits]\ =$identity;\n $endL[$nhits]=$end;\n $definitionL\ [$nhits]=$definition;\n $identifyerL[$nhits]=$ide\ ntifyer;\n $comment[$nhits]=\"$ldb|$identifyer [E\ val=$expectation][id=$identity%][start=$Hstart end\ =$Hend]\";\n $nhits++;\n }\n }\n }\n\ \n $profile{n}=0;\n $profile{$profile{n}\ }{name}=$name;\n $profile{$profile{n}}{seq}=$se\ q;\n $profile {n}++;\n \n for ($a=0; $a<$\ nhits; $a++)\n {\n $n=$a+1;\n \n $profile{$n}\ {name}=\"$name\\_$a\";\n $profile{$n}{seq}=\"\";\n\ $profile{$n}{Qseq}=$Qseq[$a];\n $profile{$n}{Hseq\ }=$Hseq[$a];\n $profile{$n}{Qstart}=$QstartL[$a];\\ n $profile{$n}{Hstart}=$HstartL[$a];\n $profile{$n\ }{identity}=$identityL[$a];\n $profile{$n}{definit\ ion}=$definitionL[$a];\n $profile{$n}{identifyer}=\ $identifyerL[$a];\n $profile{$n}{comment}=$comment\ [$a];\n for ($b=0; $b<$L; $b++)\n {\n if ($p\ [$a][$b])\n {\n $profile{$n}{seq}.=$p[$a][$\ b];\n }\n else\n {\n $profile{$n}\ {seq}.=\"-\";\n }\n }\n }\n \n \ $profile{n}=$nhits+1;\n return %profile;\n }\n\ sub ebi_blast_xml2profile \n {\n my ($name,$se\ q,$maxid, $minid, $mincov, $string)=(@_);\n my \ ($L,$l, $a,$b,$c,$d,$nhits,@identifyerL,$identifye\ r);\n \n\n \n $seq=~s/[^a-zA-Z]//g;\n \ $L=length ($seq);\n %hit=&xml2tag_list ($string\ , \"hit\");\n \n for ($nhits=0,$a=0; $a<$hit\ {n}; $a++)\n {\n my ($ldb,$id, $identity, $ex\ pectation, $start, $end, $coverage, $r);\n my (%Q,\ %M,%E,%I);\n \n $ldb=&tag2value ($hit{$a}{open}, \\ "database\");\n $identifyer=&tag2value ($hit{$a}{o\ pen}, \"id\");\n\n $description=&tag2value ($hit{$\ a}{open}, \"description\");\n \n %Q=&xml2tag_list \ ($hit{$a}{body}, \"querySeq\");\n %M=&xml2tag_list\ ($hit{$a}{body}, \"matchSeq\");\n %E=&xml2tag_lis\ t ($hit{$a}{body}, \"expectation\");\n %I=&xml2tag\ _list ($hit{$a}{body}, \"identity\");\n \n\n for (\ $b=0; $b<$Q{n}; $b++)\n {\n\n $qs=$Q{$b}{bod\ y};\n $ms=$M{$b}{body};\n \n $expectat\ ion=$E{$b}{body};\n $identity=$I{$b}{body};\n \ \n \n $start=&tag2value ($Q{$b}{o\ pen}, \"start\");\n $end=&tag2value ($Q{$b}{op\ en}, \"end\");\n $startM=&tag2value ($M{$b}{op\ en}, \"start\");\n $endM=&tag2value ($M{$b}{op\ en}, \"end\");\n $coverage=(($end-$start)*100)\ /$L;\n \n # print \"$id: ID: $identity COV:\ $coverage [$start $end]\\n\";\n \n \n \ if ($identity>$maxid || $identity<$minid || $cove\ rage<$mincov){next;}\n # print \"KEEP\\n\";\n\\ n \n @lr1=(split (//,$qs));\n @lr2=(sp\ lit (//,$ms));\n $l=$#lr1+1;\n for ($c=0;$\ c<$L;$c++){$p[$nhits][$c]=\"-\";}\n for ($d=0,\ $c=0; $c<$l; $c++)\n {\n $r=$lr1[$c];\n if\ ( $r=~/[A-Za-z]/)\n {\n \n $p[$nhits\ ][$d + $start-1]=$lr2[$c];\n $d++;\n }\n \ }\n \n \n $identifyerL[$nhits]=$ide\ ntifyer;\n $comment[$nhits]=\"$ldb|$identifyer\ [Eval=$expectation][id=$identity%][start=$startM \ end=$endM]\";\n $nhits++;\n }\n }\n \ \n $profile{n}=0;\n $profile{$profile{n}}{na\ me}=$name;\n $profile{$profile{n}}{seq}=$seq;\n\ $profile {n}++;\n \n for ($a=0; $a<$nhit\ s; $a++)\n {\n $n=$a+1;\n $profile{$n}{name}=\ \"$name\\_$a\";\n $profile{$n}{seq}=\"\";\n $profi\ le{$n}{identifyer}=$identifyerL[$a];\n \n $profile\ {$n}{comment}=$comment[$a];\n for ($b=0; $b<$L; $b\ ++)\n {\n if ($p[$a][$b])\n {\n $prof\ ile{$n}{seq}.=$p[$a][$b];\n }\n else\n \ {\n $profile{$n}{seq}.=\"-\";\n }\n \ }\n }\n $profile{n}=$nhits+1;\n \n r\ eturn %profile;\n }\nsub output_profile\n {\n \ my ($name,%profile)=(@_);\n my ($a);\n open\ (P, \">$name\");\n for ($a=0; $a<$profile{n}; \ $a++)\n {\n print P \">$profile{$a}{name} $pr\ ofile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n \ }\n close (P);\n return;\n }\nsub blast_x\ ml2hit_list\n {\n my $string=(@_[0]);\n ret\ urn &xml2tag_list ($string, \"hit\");\n }\nsub xm\ l2tag_list \n {\n my ($string_in,$tag)=@_;\n \ my $tag_in, $tag_out;\n my %tag;\n \n \ if (-e $string_in)\n {\n $string=&file2string\ ($string_in);\n }\n else\n {\n $stri\ ng=$string_in;\n }\n $tag_in1=\"<$tag \";\\ n $tag_in2=\"<$tag>\";\n $tag_out=\"/$tag>\"\ ;\n $string=~s/>/>##1/g;\n $string=~s//g;\n @l=($string=~/(\\<[^>]+\\>)/g);\n $t\ ag{n}=0;\n $in=0;$n=-1;\n \n \n\n foreach $\ t (@l)\n {\n\n $t=~s/<#//;\n $t=~s/#>//;\n \n\ if ( $t=~/$tag_in1/ || $t=~/$tag_in2/)\n {\n \\ n $in=1;\n $tag{$tag{n}}{open}=$t;\n $\ n++;\n \n }\n elsif ($t=~/$tag_out/)\n {\n\ \n\n $tag{$tag{n}}{close}=$t;\n $tag{\ n}++;\n $in=0;\n }\n elsif ($in)\n {\n \ \n $tag{$tag{n}}{body}.=$t;\n }\n }\n \ \n return %tag;\n }\n\n\nsub seq2gor_predictio\ n \n {\n my ($name, $seq,$infile, $outfile, $g\ or_seq, $gor_obs)=(@_);\n my ($l);\n \n `\ gorIV -prd $infile -seq $gor_seq -obs $gor_obs > g\ or_tmp`;\n open (GR, \">$outfile\");\n open \ (OG, \"gor_tmp\");\n\n while ()\n {\n \ \n $l=$_;\n if ($l=~/\\>/){print GR \"$l\";}\n els\ if ( $l=~/Predicted Sec. Struct./)\n {\n $l=\ ~s/Predicted Sec. Struct\\.//;\n print GR \"$l\ \";\n }\n }\n close (GR);\n close (OG\ );\n return;\n }\nsub seq2msa_tm_prediction \n\ {\n my ($name, $seq,$infile, $outfile, $arch,\ $psv)=(@_);\n my (%p,%gseq,%R, $blast_output, \ %s, $l);\n \n $blast_output=&run_blast ($nam\ e,\"blastp\", \"uniprot\", $infile, \"outfile\");\\ n \n \n %p=blast_xml2profile($name,$seq,$\ maxid, $minid,$mincov,$blast_output);\n \n \\ n open (F, \">tm_input\");\n for ($a=0; $a<$\ p{n}; $a++)\n {\n my $s;\n \n $s=$p{$a}{seq};\ \n $s=uc($s);\n print F \">$p{$a}{name}\\n$s\\n\";\ \n #print stdout \">$p{$a}{name}\\n$s\\n\";\n \ }\n close (F);\n print \"\\tPSITM: kept $p\ {n} Homologues for Sequence $p{0}{name}\\n\";\n \ &safe_system (\"t_coffee -other_pg fasta_seq2hmmt\ op_fasta.pl -in=tm_input -out=tm_output -arch=$arc\ h -psv=$psv\");\n unlink (\"tm_input\");\n %\ gs=read_fasta_seq(\"tm_output\");\n foreach $s \ (keys(%gs))\n {\n my (@list, $seq, @plist, @p\ seq, $L, $PL);\n \n \n #Prediction\n $seq=$gs{$s}{\ seq};\n $seq=uc($seq);\n $L=length($seq);\n @list=\ split //, $seq;\n \n #Original Profile Sequence\n \ $pseq=$p{$s}{seq};\n $pseq=uc($pseq);\n $PL=length\ ($pseq);\n @plist=split //, $pseq;\n \n for ($c=0,\ $b=0; $b<$PL; $b++)\n {\n my $r=$plist[$b];\\ n if($r ne \"-\" && $r ne \"X\")\n {\n \ $r=$plist[$b]=$list[$c++];\n }\n }\n \n if\ ($c!=$L)\n {\n print \"ERROR: Could Not Thr\ ead the Prediction Back [FATAL:tc_generic_method.p\ l]\\n\";\n myexit ($EXIT_FAILURE);\n }\n for\ ($b=0;$b<$PL; $b++)\n {\n my $r=$plist[$b];\ \n if ( $r ne \"-\" && $r ne \"X\")\n {\\ n $R{$b}{$r}++;\n }\n }\n }\n $L=l\ ength ($p{0}{seq});\n open (R2, \">$outfile\");\ \n print R2 \">$name\\n\";\n \n for ($a=0\ ; $a<$L; $a++)\n {\n \n my ($v,$v_max,$r,$r_m\ ax, @rl);\n \n $v=$v_max=0;\n @rl=keys (%{$R{$a}})\ ;\n foreach $r (@rl)\n {\n\n $v=$R{$a}{$r};\\ n if ($v>=$v_max)\n {\n $v_max=$v;\n $\ r_max=$r;\n }\n }\n print R2 \"$r_max\";\n\ }\n print R2 \"\\n\";\n close (R2);\n \ return;\n }\nsub seq2msa_gor_prediction \n {\\ n my ($name, $seq,$infile, $outfile, $gor_seq, \ $gor_obs)=(@_);\n my (%p,%gseq,%R, $blast_outpu\ t, %s, $l);\n \n \n $blast_output=&run_bl\ ast ($name,\"blastp\", \"uniprot\", $infile, \"out\ file\");\n %p=blast_xml2profile($name,$seq,$max\ id, $minid,$mincov,$blast_output);\n \n open\ (F, \">gor_input\");\n for ($a=0; $a<$p{n}; $a\ ++)\n {\n my $s;\n \n $s=$p{$a}{seq};\n $s=~s\ /\\-//g;\n $s=~s/X//g;\n \n $s=uc($s);\n print F \\ ">$p{$a}{name}\\n$s\\n\";\n }\n close (F);\ \n print \"\\tPSIGOR: kept $p{n} Homologues fo\ r Sequence $p{0}{name}\\n\";\n \n `gorIV -pr\ d gor_input -seq $gor_seq -obs $gor_obs > gor_tmp`\ ;\n unlink (\"gor_input\");\n \n open (GR\ , \">gor_output\");\n open (OG, \"gor_tmp\");\n\ \n while ()\n {\n \n my $l;\n $l=$\ _;\n \n if ($l=~/\\>/){print GR \"$l\";}\n elsif (\ $l=~/Predicted Sec. Struct./)\n {\n $l=~s/P\ redicted Sec. Struct\\.//;\n print GR \"$l\";\\ n }\n }\n close (GR);\n close (OG);\n\ \n\n %gs=read_fasta_seq(\"gor_output\");\n \ foreach $s (keys(%gs))\n {\n my (@list, $\ seq, @plist, @pseq, $L, $PL);\n \n \n #Prediction\\ n $seq=$gs{$s}{seq};\n $seq=uc($seq);\n $L=length(\ $seq);\n @list=split //, $seq;\n \n #Original Prof\ ile Sequence\n $pseq=$p{$s}{seq};\n $pseq=uc($pseq\ );\n $PL=length($pseq);\n @plist=split //, $pseq;\\ n \n $tseq=\"\";\n for ($c=0,$b=0; $b<$PL; $b++)\n\ {\n my $r=$plist[$b];\n if($r ne \"-\" \ && $r ne \"X\")\n {\n $r=$plist[$b]=$list[$\ c++];\n }\n $tseq.=$r;\n }\n \n if ($c\ !=$L)\n {\n print \"ERROR: Could Not Thread \ the Prediction Back [FATAL:tc_generic_method.pl]\\\ n\";\n print \"SEQ:$seq\\nPSEQ:$pseq\\nTSEQ:$t\ seq\";\n \n myexit ($EXIT_FAILURE);\n }\\ n for ($b=0;$b<$PL; $b++)\n {\n my $r=$plist\ [$b];\n if ( $r ne \"-\" && $r ne \"X\")\n \ {\n $R{$b}{$r}++;\n }\n }\n }\n \ \n $L=length ($p{0}{seq});\n open (R2, \">$o\ utfile\");\n print R2 \">$name\\n\";\n \n \ for ($a=0; $a<$L; $a++)\n {\n \n my ($v,$v_m\ ax,$r,$r_max, @rl);\n \n $v=$v_max=0;\n @rl=keys (\ %{$R{$a}});\n foreach $r (@rl)\n {\n\n $v=$R\ {$a}{$r};\n if ($v>=$v_max)\n {\n $v_ma\ x=$v;\n $r_max=$r;\n }\n }\n print R2 \"$\ r_max\";\n }\n print R2 \"\\n\";\n clos\ e (R2);\n return;\n }\n\nsub run_blast\n {\n \ my ($name, $method, $db,$infile, $outfile, $run\ )=(@_);\n if (!$run){$run=1;}\n \n \n \ if (&cache_file(\"GET\",$infile,$name,$method,$db,\ $outfile,$SERVER)){return $outfile;}\n else\n \ {\n \n if ( $SERVER eq \"EBI\")\n {\n $c\ l_method=$method;\n if ($cl_method =~/wu/)\n \ {\n $cl_method=~s/wu//;\n if ( $cl_method e\ q \"psiblast\")\n {\n print STDERR \"\\n**\ *************WARNING: PSI BLAST cannot be used wit\ h the NCBI BLAST Client. Use server=EBI Or server=\ LOCAL. blastp will be used instead***********\\n\"\ ;\n $cl_method=\"blastp\";\n }\n \n $com\ mand=\"t_coffee -other_pg wublast.pl --email $EMAI\ L $infile -D $db -p $cl_method --outfile $outfile \ -o xml>/dev/null 2>/dev/null\";\n &safe_system ( \ $command);\n if (-e \"$outfile.xml\") {`mv $outfi\ le.xml $outfile`;}\n }\n else\n {\\ n if ($cl_method eq \"psiblast\"){$cl_method =\"b\ lastp -j5\";}\n \n $command=\"t_coffee -other_pg\ blastpgp.pl --email $EMAIL $infile -d $db --outfi\ le $outfile -p $cl_method --mode PSI-Blast>/dev/nu\ ll 2>/dev/null\";\n &safe_system ( $command);\n \ \n if (-e \"$outfile.xml\") {`mv $outfile.xml $ou\ tfile`;}\n }\n }\n elsif ($SERVER eq \"NCB\ I\")\n {\n if ($db eq \"uniprot\"){$cl_db=\"\ nr\";}\n else {$cl_db=$db;}\n \n if ( \ $method eq \"psiblast\")\n {\n print STDERR\ \"\\n***************WARNING: PSI BLAST cannot be \ used with the NCBI BLAST Client. Use server=EBI Or\ server=LOCAL. blastp will be used instead********\ ***\\n\";\n $cl_method=\"blastp\";\n }\n \ else\n {\n $cl_method=$method;\n }\\ n $command=\"blastcl3 -p $cl_method -d $cl_db \ -i $infile -o $outfile -m 7\";\n &mysystem ($c\ ommand);\n }\n elsif ($SERVER =~/CLIENT_(.*)/)\n\ {\n my $client=$1;\n $command=\"$client\ -p $method -d $db -i $infile -o $outfile -m 7\";\\ n &mysystem ($command);\n }\n elsif ( $SERVE\ R eq \"LOCAL_blastall\")\n {\n if ($method e\ q \"blastp\")\n {\n $command=\"blastall -d \ $db -i $infile -o $outfile -m7 -p blastp\";\n \ }\n &mysystem ($command);\n }\n elsif ( $S\ ERVER eq \"LOCAL\")\n {\n\n if ($ENV{\"BLAST\ _DB_DIR\"})\n {\n $x=$ENV{\"BLAST_DB_DIR\"}\ ;\n $cl_db=\"$x$db\";\n }\n else\n \ {\n $cl_db=$db;\n }\n \n if ($met\ hod eq \"blastp\")\n {\n $command=\"blastpg\ p -d $cl_db -i $infile -o $outfile -m7 -j1\";\n \ }\n elsif ($method eq \"psiblast\")\n \ {\n $command=\"blastpgp -d $cl_db -i $infile -o\ $outfile -m7 -j5\";\n }\n elsif ($method e\ q \"blastn\")\n {\n $command=\"blastall -p blas\ tn -d $cl_db -i $infile -o $outfile -m7 -W6\";\n \ } \n &mysystem ($command);\n }\n else\n {\\ n print (\"*************** ERROR: $SERVER is a\ n Unknown Server***********\");\n }\n \n if ( !-\ e $outfile)\n {\n \n if ( $run==$BLAST_M\ AX_NRUNS)\n {\n print STDERR \"COM: $comman\ d\\n\";\n print STDERR (\"BLAST failed against $n\ ame [FATAL:$mode/$method/$program]\\n\");\n if (\ $SERVER eq \"EBI\" && !($method=~/wu/))\n {\n \ print STDERR (\"Try WuBlast instead\");\n \ return run_blast ($name,\"wublastp\", $db,$infil\ e, $outfile);\n }\n }\n else\n \ {\n print STDERR \"(Blast for $name failed [$com\ mand][Attempt $run/$BLAST_MAX_NRUNS] [Try again]\\\ n\";\n return run_blast ($name, $method, $db,$inf\ ile, $outfile, $run+1);\n }\n }\n\n &cache\ _file(\"SET\",$infile,$name,$method,$db,$outfile,$\ SERVER);\n return $outfile;\n }\n }\nsub mys\ ystem \n {\n my $command=@_[0];\n my $count\ =0;\n my $r;\n \n while (($r=&safe_system\ ($command))!=$EXIT_SUCCESS && $count<5)\n {\n\ print \"\\nCOMMAND $command Failed. Will try agai\ n\\n\";\n $count++;\n }\n return $r;\n }\\ nsub cache_file\n {\n my ($cache_mode,$infile,\ $name,$method,$db, $outfile,$server)=(@_);\n my\ $cache_file;\n #Protect names so that they can\ be turned into legal filenames\n $name=&clean_\ file_name ($name);\n\n if ($db=~/\\//)\n {\ \n $db=~/([^\\/]+)$/;\n $db=$1;\n }\n $cac\ he_file_sh=\"$name.$method.$db.$server.tmp\";\n \ $cache_file=\"$CACHE/$name.$method.$db.$server.tm\ p\";\n \n if ($infile ne \"\")\n {\n $c\ ache_file_infile_sh=\"$name.$method.$db.$server.in\ file.tmp\";\n $cache_file_infile=\"$CACHE/$name.$m\ ethod.$db.$server.infile.tmp\";\n }\n \n \ if ($cache_mode eq \"GET\")\n {\n if ($CACH\ E eq \"\" || $CACHE eq \"no\" || $CACHE eq \"ignor\ e\" || $CACHE eq \"local\" || $CACHE eq \"update\\ "){return 0;}\n elsif ( !-d $CACHE)\n {\n pr\ int STDERR \"ERROR: Cache Dir: $CACHE Does not Exi\ st\";\n return 0;\n }\n else\n {\n if \ ( -e $cache_file && &fasta_file1_eq_fasta_file2($i\ nfile,$cache_file_infile)==1)\n {\n `cp $ca\ che_file $outfile`;\n $CACHE_STATUS=\"READ CACHE\\ ";\n return 1;\n }\n }\n }\n elsi\ f ($cache_mode eq \"SET\")\n {\n if ($CACHE e\ q \"\" || $CACHE eq \"no\" || $CACHE eq \"ignore\"\ || $CACHE eq \"local\" || $CACHE eq \"update\"){\ return 0;}\n elsif ( !-d $CACHE)\n {\n print\ STDERR \"ERROR: Cache Dir: $CACHE Does not Exist\\ ";\n return 0;\n }\n elsif (-e $outfile)\n \ {\n `cp $outfile $cache_file`;\n if ($cac\ he_file_infile ne \"\"){ `cp $infile $cache_file_i\ nfile`;}\n\n #functions for updating the cache\ \n #`t_coffee -other_pg clean_cache.pl -file $\ cache_file_sh -dir $CACHE`;\n #`t_coffee -othe\ r_pg clean_cache.pl -file $cache_file_infile_sh -d\ ir $CACHE`;\n return 1;\n }\n }\n $C\ ACHE_STATUS=\"COMPUTE CACHE\";\n return 0;\n }\ \nsub file1_eq_file2\n {\n my ($f1, $f2)=@_;\n\ if ( $f1 eq \"\"){return 1;}\n elsif ( $f2 \ eq \"\"){return 1;}\n elsif ( !-e $f1){return 0\ ;}\n elsif ( !-e $f2){return 0;}\n elsif ($f\ 1 eq \"\" || $f2 eq \"\" || `diff $f1 $f2` eq \"\"\ ){return 1;}\n \n return 0;\n }\nsub clean_\ file_name \n {\n my $name=@_[0];\n \n $n\ ame=~s/[^A-Za-z1-9.-]/_/g;\n return $name;\n }\ \nsub url2file\n {\n my ($address, $out)=(@_);\ \n \n if (&pg_is_installed (\"wget\"))\n {\n\ return &safe_system (\"wget $address -O$out >/d\ ev/null 2>/dev/null\");\n }\n elsif (&pg_is_ins\ talled (\"curl\"))\n {\n return &safe_system \ (\"curl $address -o$out >/dev/null 2>/dev/null\");\ \n }\n else\n {\n print stderr \"ERRO\ R: neither curl nor wget are installed. Imnpossibl\ e to fectch remote file [FATAL]\\n\";\n exit ($EXI\ T_FAILURE);\n }\n }\nsub fasta_file1_eq_fast\ a_file2\n {\n my ($f1, $f2)=@_;\n my (%s1, \ %s2);\n my @names;\n %s1=read_fasta_seq (%f1\ );\n %s2=read_fasta_seq (%f2);\n\n @names=(k\ eys (%s1));\n \n foreach $n (keys(%s1))\n \ {\n if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\ }\n } \n \n foreach $n (keys(%s2))\n \ {\n if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\ }\n }\n return 1;\n }\n \nsub safe_system\ \n{\n my $com=@_[0];\n my $pid;\n my $status;\\ n if ($com eq \"\"){return 1;}\n\n\n if (($pid =\ fork ()) < 0){return (-1);}\n if ($pid == 0)\n \ {\n exec ($com);\n }\n else\n {\n \ $PIDCHILD=$pid;\n }\n \n waitpid ($pid,WTER\ MSIG);\n return $?; #contains the status of the e\ xit\n}\nEND {\n kill ($PIDCHILD);\n}\n\n\nsub rea\ d_template_file\n{\n my $pdb_templates = @_[0];\n \ open (TEMP, \"<$pdb_templates\");\n my %temp_h;\n \ while ()\n{\n $line = $_;\n $line =~/(\\S\ +)\\s(\\S+)/;\n $temp_h{$1}= $2;\n}\n close(TEMP\ );\n return %temp_h;\n}\n\nsub calc_rna_template\n\ {\n my ($mode, $infile, $pdbfile, $outfile)=@_;\n \ my %s, %h ;\n my $result;\n my (@profiles);\n &set\ _temporary_dir (\"set\",$infile,\"seq.pep\");\n %s\ =read_fasta_seq (\"seq.pep\");\n \n %pdb_template_\ h = &read_template_file($pdbfile);\n my $pdb_chain\ ;\n open (R, \">result.aln\");\n\n\n #print stdout\ \"\\n\";\n foreach $seq (keys(%s))\n {\n if ($pd\ b_template_h{$seq} eq \"\")\n {\n next;\n }\n \ open (F, \">seqfile\");\n print (F \">$s{$seq}{n\ ame}\\n$s{$seq}{seq}\\n\");\n close (F);\n $pdb_\ chain = $pdb_template_h{$seq};\n $lib_name=\"$s{$\ seq}{name}.rfold\";\n $lib_name=&clean_file_name \ ($lib_name);\n safe_system (\"t_coffee -other_pg \ RNAplfold2tclib.pl -in=seqfile -out=$lib_name\");\\ n \n safe_system (\"secondary_struc.py seqfile \ $CACHE$pdb_chain $lib_name\");\n \n if ( !-e $l\ ib_name)\n {\n print STDERR (\"RNAplfold failed\ to compute the secondary structure of $s{$seq}{na\ me} [FATAL:$mode/$method/$program]\\n\");\n myex\ it ($EXIT_FAILURE);\n }\n else\n {\n print st\ dout \"\\tProcess: >$s{$seq}{name} _F_ $lib_name\\\ n\";\n print R \">$s{$seq}{name} _F_ $lib_name\\\ n\";\n }\n unshift (@profiles, $lib_name);\n }\n\ close (R);\n &set_temporary_dir (\"unset\",$mode,\ $method,\"result.aln\",$outfile, @profiles);\n}\n\ \n\n\nsub seq2rna_pair{\n my ($mode, $pdbfile1, $p\ dbfile2, $method, $param, $outfile)=@_;\n\n if ($m\ ethod eq \"runsara.py\")\n {\n open(TMP,\"<$pdbfi\ le1\");\n my $count = 0;\n my $line;\n while (<\ TMP>)\n {\n $line = $_;\n if ($count ==1)\n \ {\n last;\n }\n $count += 1;\n }\n \n my\ $y = length($line);\n\n $chain1 = substr($line,l\ ength($line)-3,1);\n close TMP;\n open(TMP,\"<$p\ dbfile2\");\n my $count = 0;\n while ()\n \ {\n $line = $_;\n if ($count ==1)\n {\n l\ ast;\n }\n $count += 1;\n }\n $chain2 = subs\ tr($line,length($line)-3,1);\n close TMP;\n \n \ \n system(\"runsara.py $pdbfile1 $chain1 $pdbfile\ 2 $chain2 -s -o tmp >/dev/null 2>/dev/null\");\n \ open(TMP,\"$outfile\") or die\ \"cannot open the $outfile file:$!\\n\";\n\n my \ $switch = 0;\n my $seqNum = 0;\n foreach my $lin\ e ()\n {\n next unless ($line=~/SARAALI/);\ \n if ($line=~/>/)\n {\n $switch =0;\n p\ rint OUT \">seq$seqNum\\n\";\n $seqNum++; \n\ }\n if ($switch < 2){\n $switch++;\n ne\ xt;\n }\n \n if ($line =~/REMARK\\s+SARAALI\\s\ +([^\\*]+)\\*/)\n {\n my $string = $1;\n p\ rint OUT \"$string\\n\";\n }\n }\n close TMP; \ \n close OUT;\n }\n}$program=\"T-COFFEE (Version_\ 8.07)\";\\n\n","*TC_METHOD_FORMAT_01\n************\ ******generic_method.tc_method*************\n*\n* \ Incorporating new methods in T-Coffee\n* \ Cedric Notredame 26/08/08\n*\n*****************\ **************************************\n*This file\ is a method file\n*Copy it and adapt it to your n\ eed so that the method \n*you want to use can be i\ ncorporated within T-Coffee\n*********************\ **********************************\n* \ USAGE *\n*******\ ************************************************\n\ *This file is passed to t_coffee via -in:\n*\n* t_\ coffee -in Mgeneric_method.method\n*\n* The method\ is passed to the shell using the following\n*call\ :\n*\n*\n*Conventions:\n* \n*: no_name <=>\ Replaced with a space\n*:   <=> Replac\ ed with a space\n*\n******************************\ *************************\n* ALN_\ MODE *\n****************\ ***************************************\n*pairwise\ ->all Vs all (no self )[(n2-n)/2aln]\n*m_pairwi\ se ->all Vs all (no self)[n^2-n]^2\n*s_pairwise ->\ all Vs all (self): [n^2-n]/2 + n\n*multiple ->Al\ l the sequences in one go\n*\nALN_MODE pairwise\n\ *\n***********************************************\ ********\n* OUT_MODE \ *\n*********************************\ **********************\n* mode for the output:\n*E\ xternal methods: \n* aln -> alignmnent File (Fasta\ or ClustalW Format)\n* lib-> Lib file (TC_LIB_FOR\ MAT_01)\n*Internal Methods:\n* fL -> Internal Func\ tion returning a List (Librairie)\n* fA -> Interna\ l Function returning an Alignmnent\n*\nOUT_MODE a\ ln\n**********************************************\ *********\n* SEQ_TYPE \ *\n********************************\ ***********************\n*G: Genomic, S: Sequence,\ P: PDB, R: Profile\n*Examples:\n*SEQTYPE S sequen\ ces against sequences (default)\n*SEQTYPE S_P sequ\ ence against structure\n*SEQTYPE P_P structure aga\ inst structure\n*SEQTYPE PS mix of sequences and s\ tructure \n*\nSEQ_TYPE S\n*\n\n*******************\ ************************************\n* \ COMMAND LINE *\n*EXEC\ UTABLE PARAM1 IN_FLAG OUT_FLAG PARAM *\ \n************************************************\ *******\n*****************************************\ **************\n* EXECUTABLE \ *\n***************************\ ****************************\n*name of the executa\ ble\n*passed to the shell: executable\n* \nEXECUTA\ BLE tc_generic_method.pl\n*\n*********************\ **********************************\n* \ IN_FLAG *\n******\ *************************************************\\ n*IN_FLAG\n*flag indicating the name of the in com\ ing sequences\n*IN_FLAG S no_name ->no flag\n*IN_F\ LAG S &bnsp-in&bnsp -> \" -in \"\n*\nIN_FLAG -inf\ ile=\n*\n*****************************************\ **************\n* OUT_FLAG \ *\n***************************\ ****************************\n*OUT_FLAG\n*flag ind\ icating the name of the out-coming data\n*same con\ ventions as IN_FLAG\n*OUT_FLAG S no_name ->no flag\ \n*if you want to redirect, pass the parameters vi\ a PARAM1\n*set OUT_FLAG to >\n*\nOUT_FLAG -outfil\ e=\n*\n*******************************************\ ************\n* PARAM_1 \ *\n***************************\ ****************************\n*\n*Parameters sent to the EXECUTABLE and speci\ fied *before* IN_FLAG \n*If there is more than 1 P\ ARAM line, the lines are\n*concatenated\n*Command_\ line: @EP@PARAM@-gapopen%e10%s-gapext%e20\n* %s wh\ ite space\n* %e equal sign\n*\n*PARAM1 \n*\n*\n*\n\ **************************************************\ *****\n* PARAM_2 \ *\n**********************************\ *********************\n*\n*\ Parameters sent to the EXECUTABLE and specified \n\ *after* IN_FLAG and *before* OUT_FLAG\n*If there i\ s more than 1 PARAM line, the lines are\n*concaten\ ated\n*\n*PARAM1 \n*\n*\n*************************\ ******************************\n* \ PARAM *\n***********\ ********************************************\n*\n*Parameters sent to the EXEC\ UTABLE and specified *after* OUT_FLAG\n*If there i\ s more than 1 PARAM line, the lines are\n*concaten\ ated\n*\nPARAM -mode=seq_msa -method=clustalw\nPAR\ AM -OUTORDER=INPUT -NEWTREE=core -align -gapopen\ =-15\n*\n*****************************************\ **************\n* END \ *\n***************************\ ****************************\n","*TC_METHOD_FORMAT\ _01\n***************clustalw_method.tc_method*****\ ****\nEXECUTABLE clustalw\nALN_MODE pairwise\nIN_\ FLAG -INFILE=\nOUT_FLAG -OUTFILE=\nOUT_MODE aln\ \nPARAM -gapopen=-10\nSEQ_TYPE S\n**************\ ***********************************\n","$VersionTa\ g = \ \ 2.43;\n$SILENT=\\ " >/dev/null 2>/dev/null\";\n$EXIT_SUCCESS=0;\n$EX\ IT_FAILURE=1;\n$INTERNET=-1;\n\n\n\n\n\nuse FileHa\ ndle;\nuse Env qw(HOME);\n\nmy %onelett_prot=&fill\ _onelett_prot();\nmy %threelett_prot=&fill_threele\ tt_prot();\nmy %onelett_RNA=&fill_onelett_RNA();\n\ my %threelett_RNA=&fill_threelett_RNA();\nmy %onel\ ett_DNA=&fill_onelett_DNA();\nmy %threelett_DNA=&f\ ill_threelett_DNA();\n\n\n\n\n\nmy %onelett = (\n'\ P' => \\%onelett_prot,\n'D' => \\%onelett_DNA,\n'R\ ' => \\%onelett_RNA\n);\n\n\nmy %threelett = (\n'P\ ' => \\%threelett_prot,\n'D' => \\%threelett_DNA,\\ n'R' => \\%threelett_RNA\n);\n\n\n\n\n\n\n\nif($AR\ GV[0]=~/help/ ||$ARGV[0]=~/man/ || $ARGV[0]=~/HELP\ / || $ARGV[0]=~/Man/ || $ARGV[0] eq \"-h\" || $AR\ GV[0] eq \"-H\" )\n{die \"SYNTAX: extract_from_pd\ b Version $VersionTag \n Minimum: [ext\ ract_from_pdb file] \n OR \n [... | ex\ tract_from_pdb]\n Flags (Default setting on the f\ irst line)\n -version...................[Return\ s the Version Number]\n -force..........\ ...........[Forces the file to be treated like a P\ DB file]\n [R\ egenerates the header and SEQRES fields]\n \ -force_name................[Forces the file to \ be named after name]]\n -infile.....file\ ...........[Flag can be omited]\n \ [File must be pdb or fro pgm]\n \ [File can also be compressed Z \ or gz]\n [In \ the case of a compressed file, you can omit the gz\ |Z extension]\n -netfile................\ ...[File will be fetch from the net using wget]\n \ [wget or curl\ must be installed]\n \ [ftp://ftp.gnu.org/pub/gnu/wget/]\n \ [http://curl.haxx.\ se/]\n [Must \ also be used to retrieve the file from a local pdb\ copy (cf netaddress)]\n -netaddress....\ ............[Address used for the retrieving the n\ etfile]\n [ht\ tp://www.rcsb.org/pdb/cgi/export.cgi/%%.pdb.gz?for\ mat=PDB&pdbId=%%&compression=gz]\n \ [http://www.expasy.ch/cgi-bi\ n/get-pdb-entry.pl?%%]\n \ [local -> will get the file from pdb_d\ ir (see pdb_dir)]\n -netcompression.....\ .......[Extension if the netfile comes compressed]\ \n [gz]\n \ -pdb_dir...................[address of the \ repertory where the pdb is installed]\n \ [Supports standard ftp \ style installation OR every stru in DIR]\n \ [Give the ..../pdb/s\ tructure/ dir]\n \ [If value omitted, the pg gets it from the env\ variable PDB_DIR]\n -netcompression_pg.\ ........[gunzip]\n -is_pdb_name........n\ ame...[Returns 1 if the name is a PDB ID, 0 otherw\ ise]\n -get_pdb_chains.....name...[Retur\ ns the list of chains corresponding to the entry]\\ n -get_pdb_id.........name...[Returns th\ e PDB id within the provided pdb file]\n \ -get_fugue_name.....name...[Turns a name into a n\ ame valid for fugue]\n \ [Uses the netaddress to do so]\n -cha\ in......FIRST..........[Extract the first chain on\ ly]\n A B C..........[Extract Several chai\ ns if needed]\n ALL............[Extract al\ l the chains] \n -ligand.....ALL........\ ....[Extract the ligands in the chain (HETATM)]\n \ ,[Extract All \ the named lignds]\n -ligand_only...............\ [Extract only the ligands]\n -ligand_lis\ t...............[Extract the list of ligands]\n \ -coor..........[Coordinates of the fr\ agment to extract]\n [Omit end to \ include the Cter]\n -num........absolute\ .......[absolute: relative to the seq] \n \ file...........[file: relative to fi\ le]\n -num_out....new............[new: s\ tart 1->L]\n old............\ [old: keep the file coordinates]\n -dele\ te........[Delete from residue start t\ o residue end]\n -atom.......CA.............[At\ oms to include, ALL for all of them]\n CA \ O N.........[Indicate several atoms if needed]\n \ -code.......3..............[Use the 1 letter cod\ e or the 3 letters code]\n -mode.......raw.....\ .......[Output original pdb file]\n \ pdb............[Output something that look\ s like pdb]\n fasta..........[Output the s\ equences in fasta format]\n simple........\ .[Output a format easy to parse in C ]\n \ -seq_field..ATOM...........[Field used to extrac\ t the sequence]\n SEQRES.........[Use the \ complete sequence]\n -seq......................\ .[Equivalent to -mode fasta]\n -model......1..\ ............[Chosen Model in an NMR file]\n \ -nodiagnostic..............[Switches Error Mes\ sages off]\n -debug.....................\ [Sets the DEBUG ON]\n -no_remote_pdb_dir\ .........[Do not look for a remote file]\n \ -cache_pdb.................[Cache Value, defaul\ t is $HOME/.t_coffee/cache, other values: NO<=> No\ cache]\n\n Environement Variables\n \ These variables can be set from the environement\ \n Command line values with the correspo\ nding flag superseed evironement value\n \ NO_REMOTE_PDB_DIR..........[Prevents the program \ from searching remote file: faster]\n PD\ B_DIR....................[Indicates where PDB file\ must be fetched (localy)]\n\n PROBLEMS: please c\ ontact cedric.notredame\\@europe.com\\n\";\n exit\ ($EXIT_SUCCESS);\n}\n\n$np=0;\n$n_para=$#ARGV;\n$\ model=1;\n$pdb_dir=$ENV{'PDB_DIR'};if ($pdb_dir){$\ pdb_dir.=\"/\";}\n$debug=$ENV{'DEBUG_EXTRACT_FROM_\ PDB'};\n\n$no_remote_pdb_dir=$ENV{NO_REMOTE_PDB_DI\ R};\n$HOME=$ENV{'HOME'};\nif ( $ENV{CACHE_4_TCOFFE\ E})\n{$cache=$ENV{CACHE_4_TCOFFEE};}\nelse\n{\n \ $cache=\"$HOME/.t_coffee/cache/\";\n}\n\n \n$ne\ taddress=\"http://www.rcsb.org/pdb/files/%%.pdb.gz\ \";\n$netcompression_pg=\"gunzip\";\n$netcompressi\ on=\"gz\";\n\n foreach ($np=0; $np<=$n_para; $np+\ +)\n{ \n $value=$ARGV[$np];\n \n i\ f ($np==0 && !($value=~/^-.*/))\n{ \n $pdb_\ file= $ARGV[$np];\n}\n elsif ( !($value=~/^-.*/\ ))\n{\n print \"@ARGV\";\n die;\n} \n \n els\ if ($value eq \"-nodiagnostic\"){$nodiagnostic=1;}\ \n elsif ($value eq \"-force\")\n{\n $force_pdb\ =1;\n}\n elsif ($value eq \"-force_name\")\n{\n\ $force_name=$ARGV[++$np];\n $force_pdb=1;\n}\n \ \n elsif ($value eq \"-is_pdb_name\")\n{\n $pd\ b_file= $ARGV[++$np];\n \n $is_pdb_name=1;\n \n} \\ n elsif ($value eq \"-debug\")\n{\n $debug=1;\n\ }\n elsif ($value eq \"-get_pdb_chains\")\n{\n \ $pdb_file= $ARGV[++$np];\n $get_pdb_chains=1;\n}\n\ elsif ($value eq \"-get_pdb_ligands\")\n{\n $g\ et_pdb_ligands=1;\n}\n \n elsif ($value eq \\ "-get_pdb_id\")\n{\n $pdb_file= $ARGV[++$np];\n $g\ et_pdb_id=1;\n \n}\n \n elsif ( $value eq \"\ -get_fugue_name\")\n{\n $pdb_file= $ARGV[++$np];\n\ $get_fugue_name=1;\n}\n elsif ( $value eq \"-i\ nfile\")\n{\n $pdb_file= $ARGV[++$np];\n} \n\ elsif ($value eq \"-netfile\")\n{\n $netfile=1\ ;\n if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_file= $ARGV\ [++$np];}\n}\n elsif ( $value eq \"-num\")\n{\\ n $numbering= $ARGV[++$np];\n}\n elsif ( \ $value eq \"-num_out\")\n{\n $numbering_out\ = $ARGV[++$np];\n}\n elsif ( $value eq \"-netad\ dress\")\n{\n $netadress=$ARGV[++$np];\n}\n \n\ elsif ( $value eq \"-netcompression\")\n{\n $\ netcompression=$ARGV[++$np];\n}\n elsif ( $valu\ e eq \"-pdb_dir\")\n{\n if ( !($ARGV[$np+1]=~/^-.\ */)){$pdb_dir= \"$ARGV[++$np]/\";}\n}\n elsif \ ( $value eq \"-no_remote_pdb_dir\")\n{\n $no_remot\ e_pdb_dir=1;\n if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_\ dir= \"$ARGV[++$np]/\";}\n}\n elsif ( $value eq\ \"-cache\")\n{\n $cache=$ARGV[++$np];\n}\n \n \ elsif ($value eq \"-netcompression_pg\")\n{\n \ $netcompression_pg=$ARGV[++$np];\n}\n elsif (\ $value eq \"-mode\")\n{\n $MODE=$ARGV[++$np]\ ;\n}\n\n elsif ( $value eq \"-model\")\n{\n \ $model= $ARGV[++$np];\n}\n elsif ($value eq \ \"-seq_field\" )\n{\n $seq_field= $ARGV[++$n\ p];\n} \n elsif ($value eq \"-coor\" )\n{\n \ $start= $ARGV[++$np];\n \n if (($ARGV[\ $np+1] eq \"\") ||($ARGV[$np+1]=~/^-.*/)){$end=\"*\ \";} \n else {$end= $ARGV[++$np];} \n \ $coor_set=1;\n}\n elsif ($value eq \"-del\ ete\" )\n{\n $delete_start= $ARGV[++$np];\n \ $delete_end= $ARGV[++$np];\n $delete_s\ et=1;\n}\n elsif ($value eq \"-code\")\n{\n \ $code= $ARGV[++$np];\n}\n elsif ($value eq\ \"-no_hetatm\")\n{\n $no_hetatm=1;\n}\n \ elsif ($value eq \"-chain\")\n{\n while (!($\ ARGV[$np+1] eq \"\") &&!($ARGV[$np+1]=~/^-.*/))\n{\ \n ++$np;\n @c_chain=(@chain, $ARGV[$\ np]);\n $hc_chain{$ARGV[$np]}=$#c_chain+1;\n\ } \n}\n elsif ($value eq \"-atom\")\n\ {\n\n while (!($ARGV[$np+1] eq \"\") && !($A\ RGV[$np+1]=~/^-.*/))\n{\n ++$np;\n $at\ om[$n_atom++]= $ARGV[$np];\n $atom_list{$AR\ GV[$np]}=1; \n} \n \n}\n elsif ( $v\ alue eq \"-unfold\")\n{\n $unfold=1;\n}\n elsif\ ($value eq \"-seq\" ||$value eq \"-fasta\" )\n{\n\ $MODE=\"fasta\";\n}\n elsif ( $value eq \ \"-version\")\n{\n print STDERR \"\\nextract_from\ _pdb: Version $VersionTag\\n\";\n &myexit ($EXIT_S\ UCCESS);\n}\n elsif ( $value eq \"-ligand\")\n{\ \n while (!($ARGV[$np+1] eq \"\") && !($ARGV[$np+1\ ]=~/^-.*/))\n{\n ++$np;\n $ligand=1;\n \ $ligand_list{$ARGV[$np]}=1; \n} \n $hc_chai\ n{'LIGAND'}=1;\n}\n elsif ( $value eq \"-ligand\ _only\")\n{\n $ligand_only=1;\n}\n}\nif ( $debug)\\ n{\n print STDERR \"\\n[DEBUG:extract_from_pdb]\ NO_REMOTE_PDB_DIR: $no_remote_pdb_dir\\n\";\n \ print STDERR \"\\n[DEBUG:extract_from_pdb] PDB_DIR\ : $pdb_dir\\n\";\n}\n\nif ( $is_pdb_name)\n{\n \ if (remote_is_pdb_name($pdb_file, $netaddress))\n{\ \n print \"1\";\n}\n else\n{\n print \"0\";\n}\\ n exit ($EXIT_SUCCESS);\n}\n \n\nif (!$force\ _name)\n{\n $pdb_file=~/([^\\/]*)$/;\n $forc\ e_name=$1;\n}\n\n$local_pdb_file=$pdb_file;\n\nif \ ( $debug){print STDERR \"\\n[DEBUG: extract_from_p\ db] Scan For $local_pdb_file\\n\";}\n\n$mem=$no_re\ mote_pdb_dir;\n$no_remote_pdb_dir=1;\n$tmp_pdb_fil\ e=get_pdb_file ($local_pdb_file);\n\nif ( !-e $tmp\ _pdb_file || $tmp_pdb_file eq \"\")\n{\n $local\ _pdb_file=$pdb_file;\n ($local_pdb_file, $suffi\ x_chain)=&pdb_name2name_and_chain($local_pdb_file)\ ;\n\n if ($local_pdb_file)\n{\n if ( $debug){pr\ int STDERR \"\\nSplit $pdb_file into $local_pdb_fi\ le and $suffix_chain \\n\";}\n $tmp_pdb_file=get_p\ db_file ($local_pdb_file);\n if ( $tmp_pdb_file ne\ \"\")\n{\n @c_chain=();\n @c_chain=($suff\ ix_chain);\n %hc_chain=();\n $hc_chain{$su\ ffix_chain}=1;\n}\n}\n}\n\n$no_remote_pdb_dir=$mem\ ;\nif ($no_remote_pdb_dir==0)\n{\n if ( !-e $tm\ p_pdb_file || $tmp_pdb_file eq \"\")\n{\n \n $loca\ l_pdb_file=$pdb_file;\n ($local_pdb_file, $suffix_\ chain)=&pdb_name2name_and_chain($local_pdb_file);\\ n if ($local_pdb_file)\n{\n if ( $debug){print\ STDERR \"\\nSplit $pdb_file into $local_pdb_file \ and $suffix_chain \\n\";}\n $tmp_pdb_file=get_\ pdb_file ($local_pdb_file); \n if ( $tmp_pd\ b_file ne \"\")\n{\n @c_chain=();\n @c_chain=($s\ uffix_chain);\n %hc_chain=();\n $hc_chain{$suffi\ x_chain}=1;\n}\n}\n}\n}\n\nif ( $debug){print STDE\ RR \"\\n$pdb_file copied into ##$tmp_pdb_file##\\n\ \";}\n\n\nif ( !-e $tmp_pdb_file || $tmp_pdb_file \ eq \"\")\n{\n if ($is_pdb_name)\n{\n print \"0\ \\n\"; exit ($EXIT_SUCCESS);\n}\n else\n{\n \n \ print \"\\nEXTRACT_FROM_PDB: NO RESULT for $pdb_f\ ile [FATAL:EXTRACT_FROM_PDB Version $VersionTag]\\\ n\";\n &myexit ($EXIT_FAILURE); \n}\n}\n\n\n\n\ \n%molecule_type=&pdbfile2chaintype($tmp_pdb_file)\ ;\n\n$pdb_id=&get_pdb_id ($tmp_pdb_file);\n\nif ( \ $pdb_id eq \"\"){$pdb_id=$force_name;}\n\n@f_chain\ =&get_chain_list ($tmp_pdb_file);\n\n\n\nif ( $get\ _pdb_chains)\n{\n print \"@f_chain\\n\";\n &\ myexit ($EXIT_SUCCESS);\n}\nif ( $get_pdb_ligands)\ \n{\n %complete_ligand_list=&get_ligand_list ($\ tmp_pdb_file);\n print $complete_ligand_list{\"\ result\"};\n &myexit ($EXIT_SUCCESS);\n}\n\nels\ if ( $get_pdb_id ||$get_fugue_name )\n{\n if \ (@c_chain && $c_chain[0] eq \"FIRST\"){$pdb_id=$p\ db_id.$f_chain[0];}\n elsif (@c_chain && $c_cha\ in[0] ne \" \"){$pdb_id=$pdb_id.$c_chain[0];}\n \ \n print \"$pdb_id\\n\";\n &myexit ($EXIT_S\ UCCESS);\n \n}\nelsif ( $is_pdb_name)\n{\n p\ rintf \"1\\n\";\n &myexit ($EXIT_SUCCESS);\n}\n\ \n\n$structure_file=vtmpnam();\n\n\n$INFILE=vfop\ en (\"$tmp_pdb_file\", \"r\"); \n$TMP=vfopen (\"$s\ tructure_file\", \"w\");\n\n$print_model=1;\n$in_m\ odel=0;\nwhile ( <$INFILE>)\n{\n $line=$_;\n if \ ($line =~/^MODEL\\s*(\\d*)/)\n{\n if ($1==$model)\\ n{\n $in_model=1;\n $print_model=1;\n \ $is_nmr=1;\n}\n elsif ( $in_model==0)\n{\n $pr\ int_model=0;\n}\n elsif ( $in_model==1)\n{\n l\ ast;\n}\n}\n if ($print_model){print $TMP $line;}\ \n\n}\nclose ($TMP);\nclose ($INFILE);\n\n \n\n \ if ($numbering eq \"\"){$numbering=\"absolute\";}\ \n if ($numbering_out eq \"\"){$numbering_out=\"n\ ew\";}\n\n if ( $delete_set && $coor_set) {die \"\ -delete and -coor are mutually exclusive, sorry\\n\ \";}\n if ( $n_atom==0){$atom_list[$n_atom++]=\"A\ LL\";$atom_list{$atom_list[0]}=1;}\n if ( $seq_fi\ eld eq \"\"){$seq_field=\"ATOM\";}\n \n if ( $MO\ DE eq \"\"){$MODE=\"pdb\";}\n elsif ( $MODE eq \"\ simple\" && $code==0){$code=1;}\n\n if ( $code==0\ ){$code=3;}\n\n\nif ($f_chain[0] eq \" \"){$hc_cha\ in{' '}=1;$c_chain[0]=\" \";}\nelsif (!@c_chain){$\ hc_chain{FIRST}=1;$c_chain[0]=\"FIRST\";}#make sur\ e the first chain is taken by default\n\nif ($h\ c_chain{ALL}) \n{\n @c_chain=@f_chain;\n \ foreach $e (@c_chain){$hc_chain{$e}=1;}\n}\nelsif\ ($hc_chain{FIRST})\n{\n @c_chain=($f_chain[0]);\n \ $hc_chain{$f_chain[0]}=1;\n}\n\n\n$MAIN_HOM_CODE=&\ get_main_hom_code ($structure_file);\n$INFILE=vfop\ en ($structure_file, \"r\");\n\n\nif ( $MODE eq \"\ raw_pdb\" || $MODE eq \"raw\")\n{\n while (<$IN\ FILE>)\n{ print \"$_\";}\n close ( $INFILE);\n \ &myexit($EXIT_SUCCESS);\n} \nif ( $MODE eq \\ "raw4fugue\" )\n{\n while (<$INFILE>)\n{ \n $l=\ $_;\n if ($l=~/^SEQRES/)\n{\n \n $c= subst\ r($l,11,1);\n if ($hc_chain {$c}){print \"$l\"\ ;}\n}\n elsif ( $l=~/^ATOM/)\n{\n $c=substr($l\ ,21,1);\n if ($hc_chain {$c}){print \"$l\";}\n\ }\n}\n close ( $INFILE);\n &myexit($EXIT_SUC\ CESS);\n} \n\nif ( $MODE eq \"pdb\")\n{\n\n \ $read_header=0;\n while (<$INFILE>) \n{\n $\ line=$_;\n if ($line =~ /^HEADER/){print \"\ $line\";$read_header=1;}\n}\n close ($INFILE);\\ n\n if (!$read_header)\n{\n print \"HEADER U\ NKNOWN 00-JAN-00 \ $force_name\\n\";\n}\n\n $INFILE=vfopen ($stru\ cture_file, \"r\");\n \n print \"COMPND 1 \ CHAIN:\";\n $last=pop(@c_chain);\n foreach $\ c ( @c_chain){ print \" $c,\";}\n if ( $last eq\ \" \"){print \" NULL;\\n\";}\n else \n{\n \ print \" $last;\\n\";\n}\n @c_chain=(@c_chain,\ $last);\n \n print \"REMARK Output of the p\ rogram extract_from_pdb (Version $VersionTag)\\n\"\ ;\n print \"REMARK Legal PDB format not Guarant\ eed\\n\";\n print \"REMARK This format is not m\ eant to be used in place of the PDB format\\n\";\n\ print \"REMARK The header refers to the origin\ al entry\\n\";\n print \"REMARK The sequence fr\ om the original file has been taken in the field: \ $seq_field\\n\";\n print \"REMARK extract_from_\ pdb, 2001, 2002, 2003, 2004, 2005 2006 (c) CNRS an\ d Cedric Notredame\\n\"; \n if ( $coor_set)\n\ {\n print \"REMARK Partial chain: Start $sta\ rt End $end\\n\";\n}\n if ( $is_nmr)\n{\n \ print \"REMARK NMR structure: MODEL $model\\n\";\\ n}\n \n if ( $n_atom!=0)\n{\n print \"R\ EMARK Contains Coordinates of: \";\n foreach\ $a (@atom){print \"$a \";}\n print \"\\n\";\ \n} \n}\n\n\n\n\nmy $residue_index = -999;\nmy $o\ ld_c = \"TemporaryChain\";\n\nwhile (<$INFILE>) \n\ {\n $line=$_;\n\n\n if ($line =~ /^SEQRES/)\n{\n\n\ @field=/(\\S*)\\s*/g;\n \n \n $c= substr($_,11,\ 1);\n\n \n $l=$#field;\n for ($a=4; $a<$#field \ ;)\n{\n if (!$onelett{$molecule_type{$c}}->{$fie\ ld[$a]})\n{\n splice @field, $a, 1;\n}\n else\ \n{\n $a++;\n}\n}\n \n if ( $c ne $in_chain)\\ n{\n $pdb_chain_list[$n_pdb_chains]=$c;\n $pdb\ _chain_len [$n_pdb_chains]=$len;\n $in_chain=$c;\ \n $n_pdb_chains++;\n}\n \n for ( $a=4; $a<$#fi\ eld;$a++)\n{\n @{$complete_seq{$c}}->[$complete_\ seq_len{$c}++]=$field[$a];\n}\n}\n elsif ( $lin\ e=~/^ATOM/ || ($line=~/^HETATM/ && &is_aa(substr($\ line,17,3),substr($line,21,1)) && !$no_hetatm))\n{\ \n\n \n $RAW_AT_ID=$AT_ID=substr($line,12,4);\\ n $RES_ID=&is_aa(substr($line,17,3),substr($line,2\ 1,1));\n $CHAIN=substr($line,21,1);\n\n $RES_NO\ =substr($line,22,4);\n $HOM_CODE=substr ($line, 26\ , 1);\n $TEMP=substr($line,60,6);\n \n $TEMP=~s/\\\ s//g;\n $AT_ID=~s/\\s//g;\n $RES_ID=~s/\\s/\ /g;\n $RES_NO=~s/\\s//g;\n \n if ( $HOM_CO\ DE ne $MAIN_HOM_CODE){next;}\n elsif ( $already_re\ ad2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}){next;}\n el\ se{$already_read2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO\ }=1;}\n \n \n if ($coor_set && $numbering eq \"fil\ e\" && $residue_index ne $RES_NO)\n{\n \n \ if ( $RES_NO<=$start){$real_start{$CHAIN}++;}\n \ if ( $RES_NO<=$end){$real_end{$CHAIN}++;}\n}\n e\ lsif ($numbering eq \"absolute\")\n{\n $real_s\ tart{$CHAIN}=$start;\n $real_end{$CHAIN}=$end;\ \n}\n\n $KEY=\"ALL\";\n if ( $CHAIN \ ne $in_atom_chain)\n{\n \n $pdb_atom_chain_l\ ist[$n_pdb_atom_chains]=$c;\n $pdb_atom_chain_le\ n [$n_pdb_atom_chains]=$len;\n $in_atom_chain=$c\ ;\n $n_pdb_atom_chains++;\n}\n \n if ( $residue_\ index ne $RES_NO)\n{\n $residue_index = $RES_\ NO;\n @{$atom_seq{$CHAIN}}->[$atom_seq_len{$C\ HAIN}++]=$RES_ID;;\n}\n}\n\n}\nclose ($INFILE);\n\\ n\n\n\n\n\n$INFILE=vfopen ($structure_file, \"r\")\ ;\nforeach $c (@c_chain)\n{\n if ( $seq_field e\ q \"SEQRES\"){@pdb_seq=@{$complete_seq{$c}};}\n el\ sif ( $seq_field eq \"ATOM\") {@pdb_seq=@{$atom_s\ eq{$c}};}\n \n\n $full_length=$l=$#pdb_seq+1;\n \\ n if ( $real_end{$c}==\"*\"){$real_end{$c}=$full_l\ ength;}\n if ( $coor_set)\n{ \n\n if ( $real\ _end{$c} < $l){splice @pdb_seq, $real_end{$c}, $l;\ }\n if ( $real_start{$c} < $l){splice @pdb_seq,\ 0, $real_start{$c}-1;} \n $l=$#pdb_seq;\\ n}\n\n elsif ( $delete_set)\n{\n splice @pdb_se\ q, $delete_start, $delete_end-$delete_start+1;\n \ $l=$#pdb_seq;\n}\n \n $new_fasta_name=\"$pdb_id$\ c\";\n if ( $coor_set)\n{\n if ( $n_pdb_chains=\ =0){$new_fasta_name=\"$new_fasta_name$c\";}\n $\ new_fasta_name= $new_fasta_name.\"\\_$start\\_$end\ \";\n}\n \n if ( $MODE eq \"pdb\")\n{\n $nl=\ 1;\n $n=0;\n \n foreach $res ( @pdb_seq)\\ n {\n if ( !$n)\n {\n \n printf \"SEQRES %2\ d %1s %4d \", $nl,$c, $l;\n $nl++;\n }\n $\ res=~s/\\s//g;\n \n if ($code==1){ print\ f \"%3s \",$onelett{$molecule_type{$c}}->{$res};}\\ n elsif ($code==3){ printf \"%3s \",$res};\n\ \n $n++; \n if ( $n==13){$n=0;p\ rint \"\\n\";}\n}\n if ( $n!=0){print \"\\n\"; $\ n=0;}\n}\n elsif ( $MODE eq \"simple\")\n{\n pri\ nt \"# SIMPLE_PDB_FORMAT\\n\";\n if ( $new_fasta\ _name eq \" \"){$new_fasta_name=\"dummy_name\";}\n\ print \">$new_fasta_name\\n\";\n\n foreach $r\ es ( @pdb_seq)\n{\n print \"$onelett{$molecu\ le_type{$c}}->{$res}\";\n}\n print \"\\n\";\n}\n\ elsif ( $MODE eq \"fasta\")\n{\n $n=0;\n prin\ t \">$new_fasta_name\\n\";\n \n foreach $res (\ @pdb_seq)\n{\n\n print \"$onelett{$molecule\ _type{$c}}->{$res}\";\n $n++;\n \ if ( $n==60){print \"\\n\"; $n=0;}\n}\n print \\ "\\n\"; \n}\n}\n\nif ( $MODE eq \"fasta\")\n{\n \ &myexit($EXIT_SUCCESS);\n \n}\n\n \n $charcou\ nt=0;\n $inchain=\"BEGIN\";\n $n=0;\n while (<$\ INFILE>) \n{\n $line=$_;\n \n if ($line \ =~/^ATOM/ || ($line=~/^HETATM/))\n{\n $line_head\ er=\"UNKNWN\";\n $RES_ID=substr($line,17,3);\n $ch\ ain = substr($line,21,1);\n\n if ($line =~/^ATOM/)\ \n{\n $line_header=\"ATOM\";\n $RES_ID=(&i\ s_aa($RES_ID,$chain))?&is_aa($RES_ID,$chain):$RES_\ ID;\n}\n elsif ($line=~/^HETATM/ && ($ligand_list \ {$RES_ID} ||$ligand_list {'ALL'} || !&is_aa($RES_I\ D,$chain)))\n{\n $line_header=\"HETATM\";\n}\n\ elsif ($line=~/^HETATM/ && (&is_aa($RES_ID,$chain\ ) && !$no_hetatm))\n{\n $line_header=\"ATOM\";\ \n $RES_ID=&is_aa($RES_ID,$chain);\n}\n else\n\ {\n next;\n}\n\n \n\n $X=substr($line,30,8); \ \n $Y=substr($line,38,8);\n $Z=substr($line,46,\ 8);\n $TEMP=substr($line,60,6);\n \n $RAW_AT_ID=$A\ T_ID=substr($line,12,4);\n $CHAIN=substr($line,21,\ 1);\n $RES_NO=substr($line,22,4);\n $HOM_CODE=subs\ tr ($line, 26, 1);\n \n $X=~s/\\s//g;\n $Y=~s/\\s/\ /g;\n $Z=~s/\\s//g;\n $TEMP=~s/\\s//g;\n \n $AT_ID\ =~s/\\s//g;\n $RES_ID=~s/\\s//g;\n $RES_NO=~s/\\s/\ /g;\n\n \n if ( $HOM_CODE ne $MAIN_HOM_CODE){next;\ }\n elsif ( $already_read{$CHAIN}{$RES_ID}{$AT_ID}\ {$RES_NO}){next;}\n else{$already_read{$CHAIN}{$RE\ S_ID}{$AT_ID}{$RES_NO}=1;}\n \n $KEY=\"ALL\";\n\n \ if ( $RES_NO ==0){$start_at_zero=1;}\n\n $RE\ S_NO+=$start_at_zero; \n \n if ( $current_chain\ ne $CHAIN)\n{\n $current_chain=$CHAIN;\n \ $pos=$current_residue=0;\n $offset=($coor_set)\ ?($real_start{$CHAIN}-1):0;\n if ( $seq_fie\ ld eq \"SEQRES\"){@ref_seq=@{$complete_seq{$CHAIN}\ };}\n elsif ( $seq_field eq \"ATOM\") {@ref_s\ eq=@{$atom_seq{$CHAIN}};}\n}\n \n if ($current_res\ idue != $RES_NO)\n{\n $current_residue=$RES_NO\ ;\n if ( $seq_field eq \"SEQRES\"){$pos=$cu\ rrent_residue;}\n elsif ( $seq_field eq \"ATOM\ \"){$pos++;}\n}\n \n \n if ($n_atom==0 || $atom_li\ st{$AT_ID}==1 || $atom_list{$KEY}==1)\n{ \n \\ n $do_it=(!@c_chain || $hc_chain{$CHAIN} ||$hc\ _chain{'LIGAND'} );\n \n $do_it= ($do_it==\ 1) && ($coor_set==0 ||($pos>=$real_start{$CHAIN} &\ & $pos<=$real_end{$CHAIN}));\n $do_it= ($do_it\ ==1) && ($delete_set==0 || $pos<$delete_start ||$p\ os>$delete_end );\n if ($ligand==0 && $line_he\ ader eq \"HETATM\" ){$do_it=0;}\n if ($ligand_\ only==1 && $line_header eq \"ATOM\" ){$do_it=0;}\n\ if ($ligand==1 && $line_header eq \"HETATM\" \ && $ligand_list{$RES_ID}==0 && $ligand_list{\"ALL\\ "}==0){$do_it=0;} \n \n \n if ( $do_it\ )\n{\n $n++;\n $out_pos=$pos;\n \n if ( \ $delete_set)\n{\n if ( $out_pos< $delete_start)\ {;}\n else {$offset=$delete_end-$delete_start;}\ \n} \n \n if ( $numbering_out \ eq \"new\"){$out_pos-=$offset;}\n elsif ( $\ numbering_out eq \"old\"){$out_pos=$RES_NO;}\n \ \n \n \n if ( $code==1){$R\ ES_ID=$onelett{$molecule_type{$c}}->{$RES_ID};}\n \ \n if ($unfold)\n{\n $unfolded_x+=5\ ;\n $X=$unfolded_x;\n $Y=0;\n $Z=0;\n \ $float=1;\n}\n else\n{\n $float=3;\\ n}\n\n if ( $MODE eq \"pdb\")\n{\n prin\ tf \"%-6s%5d %-4s %3s %s%4d %8.3f%8.3f%8.3f 1.\ 00 %5.2f\\n\",$line_header, $n, $RAW_AT_ID,$RES_ID\ ,$CHAIN,$out_pos, $X, $Y, $Z,$TEMP; \n}\n \ elsif ( $MODE eq \"simple\")\n{\n if ( $RES\ _ID eq \"\"){$RES_ID=\"X\";}\n printf \"%-6s %5\ s %s %2s %4d %8.3f %8.3f %8.3f\\n\",$line_heade\ r, $AT_ID, $RES_ID,($CHAIN eq\"\" || $CHAIN eq \" \ \")?\"A\":$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;\n}\n\\ n}\n}\n}\n}\nprint \"\\n\";\nclose($INFILE);\n\n\n\ if ( $error ne \"\") \n{$error=$error.\"\\nDiagnos\ tic: SEQRES and the residues in ATOM are probab\ ly Incompatible\\n\";\n $error=$error. \"Recom\ endation: Rerun with '-fix 1' in order to ignore t\ he SEQRES sequences\\n\";\n}\nif (!$nodiagnostic){\ print STDERR $error;}\n&myexit ( $EXIT_SUCCESS);\n\ \nsub remote_is_pdb_name \n{\n my $in=@_[0];\n \ my $netaddress=@_[1];\n my $ref_file, $pdb;\\ n my $value;\n\n if ( $in=~/[^\\w\\d\\:\\_]/\ ){return 0;}\n \n \n $ref_file=\"$cache/p\ db_entry_type.txt\";\n \n if ( !-e $ref_file\ || (-M $ref_file)>2 || -z $ref_file)\n{\n &url2fi\ le(\"ftp://ftp.wwpdb.org/pub/pdb/derived_data/pdb_\ entry_type.txt\", $ref_file);\n}\n \n $pdb=subs\ tr ($in,0, 4);\n \n \n $value=`grep -c $p\ db $ref_file`;\n return $value;\n}\n \nsub\ is_pdb_file\n{\n my @arg=@_;\n\n if ( !-e $\ arg[0]){return 0;}\n \n $F=vfopen ($arg[0], \ \"r\");\n while ( <$F>)\n{\n if (/^HEADER/)\n{\\ n close $F;\n return 1;\n}\n elsif ( /^SEQ\ RES/)\n{\n close $F;\n return 1;\n}\n elsi\ f ( /^ATOM/)\n{\n close $F;\n return 1;\n}\ \n}\n return 0;\n}\nsub get_pdb_id\n{\n my $\ header_file=@_[0];\n my $id;\n \n\n $F=vf\ open (\"$header_file\", \"r\");\n\n while ( <$F\ >)\n{\n \n if ( /HEADER/)\n{\n $id=substr($_,6\ 2,4 );\n return $id;\n}\n}\n close ($F);\n \ \n return \"\";\n}\n\nsub get_ligand_list\n{\ \n my $pdb_file=@_[0];\n my $chain;\n my \ $ligand;\n my %complete_ligand_list;\n \n\n \ $F=vfopen ($pdb_file, \"r\");\n while ( <$F>\ )\n{\n if ( /^HETATM/)\n{\n $line=$_;\n $c\ hain=substr($line,21,1);\n $ligand=substr($lin\ e,17,3);\n \n if (!$complete_ligand_list{$\ chain}{$ligand})\n{\n \n $complete_ligand_list{\\ "result\"}.=\"CHAIN $chain LIGAND $ligand\\n\";\n \ $complete_ligand_list{$chain}{$ligand}=1;\n}\n}\n\ }\n close ($F);\n return %complete_ligand_li\ st;\n}\n\nsub get_chain_list \n{\n my $header_f\ ile;\n my @chain_list;\n my @list;\n my $\ n_chains;\n my %chain_hasch;\n my $pdb_file=\ @_[0];\n my $c;\n my %hasch;\n my $chain;\ \n \n \n $F=vfopen ($pdb_file, \"r\");\n \ while ( <$F>)\n{\n\n\n if (/SEQRES\\s+\\d+\\s+(\\\ S+)/)\n{\n $chain = substr($_,11,1);$chain=~s/\ \\s//g;if ( $chain eq \"\"){$chain=\" \";}\n \n\ \n if ($chain && !$hasch{$chain}){$hasch{\ $chain}=1;push @chain_list, $chain;}\n}\n if (/^AT\ OM/ || /^HETATM/)\n{\n $chain = substr($_,21,1\ ); $chain=~s/\\s//g;if ( $chain eq \"\"){$chain=\"\ \";}\n if ($chain && !$hasch{$chain}){$hasch{\ $chain}=1;push @chain_list, $chain;}\n}\n}\n \n\ \n close ($F);\n if (!@chain_list)\n{\n @\ chain_list=(\"A\");\n}\n return @chain_list;\n}\ \n\nsub token_is_in_list\n{\n\n my @list=@_;\n \ my $a;\n \n for ($a=1; $a<=$#list; $a++)\\ n{\n if ( $list[$a] eq $list[0]){return $a;}\n}\n}\ \n\nsub pdb_name2name_and_chain \n{\n my $pdb_f\ ile=@_[0];\n my $pdb_file_in;\n my @array;\n\ my $chain;\n my $c;\n\n $pdb_file_in=$pd\ b_file;\n\n $pdb_file=~/^(.{4})/;$pdb_id=$1;\n \ @array=($pdb_file=~/([\\w])/g);\n \n \n $c\ hain=uc ($array[4]);\n $chain=($chain eq \"\")?\ \"FIRST\":$chain;\n \n return ( $pdb_id, $ch\ ain);\n\n if ( $#array==3){return ($pdb_id, \"F\ IRST\");}\n elsif ( $#array<4){ return ($pdb_id\ , \"\");}\n else {return ( $pdb_id, $chain);}\n\ \n \n \n}\nsub get_main_hom_code \n{\n\ my $pdb_file=@_[0];\n my %hom, $n, $best, $\ best_h;\n open (F, $pdb_file);\n while ()\ \n{\n if ( $_=~/^ATOM/)\n{\n $h=substr ($_,26,\ 1);\n $n=++$hom{$h};\n if ($n>$best)\n{\n\ $best=$n;\n $best_h=$h;\n}\n}\n}\n close (F)\ ;\n return $best_h;\n}\n\n\nsub get_pdb_file \n\ {\n my ($pdb_file_in)=(@_);\n my $result;\n \ my @letter;\n my @chain;\n my $v;\n my\ $pdb_file=$pdb_file_in;\n\n $pdb_file=($pdb_fi\ le_in=~/\\S+_S_(\\S+)/)?$1:$pdb_file_in;\n\n if\ ($no_remote_pdb_dir==0)\n{\n $no_remote_pdb_dir=1\ ;\n $result=get_pdb_file3 ($pdb_file);\n $no_remot\ e_pdb_dir=0;\n if ( $result){return $result;}\n el\ se\n{\n \n lc ($pdb_file);\n $result=g\ et_pdb_file3($pdb_file);\n return $result;\n}\ \n}\n else\n{\n return get_pdb_file3 ($pdb_file\ );\n}\n \n}\n\nsub get_pdb_file3 \n{\n my $p\ db_file_in=@_[0];\n my $result;\n my @letter\ ;\n my @chain;\n my $lcfile;\n my $ucfile\ ;\n my $pdb_file=$pdb_file_in;\n \n $lcfi\ le=lc $pdb_file;\n $ucfile=uc $pdb_file;\n\n \ if ( ($result=get_pdb_file2 ($pdb_file))){return \ $result;}\n \n\n if ($lcfile ne $pdb_file &&\ ($result=get_pdb_file2 ($lcfile))){return $result\ ;}\n if ($ucfile ne $pdb_file && ($result=get_p\ db_file2 ($ucfile))){return $result;}\n \n \n\ \n return \"\";\n}\nsub get_pdb_file2\n{\n \ my $pdb_file=@_[0];\n my $return_value;\n \ \n $return_value=\"\";\n \n if ( ($resul\ t=get_pdb_file1 ($pdb_file))){$return_value=$resul\ t;}\n elsif ( !($pdb_file=~/\\.pdb/) && !($pdb_\ file=~/\\.PDB/))\n{\n if ( ($result=get_pdb_file1 \ (\"$pdb_file.pdb\"))){$return_value=$result;}\n el\ sif ( ($result=get_pdb_file1 (\"$pdb_file.PDB\")))\ {$return_value=$result;}\n\n elsif ( ($result=get_\ pdb_file1 (\"pdb$pdb_file.pdb\"))){$return_value=$\ result;} \n elsif ( ($result=get_pdb_file1 (\"pdb$\ pdb_file.PDB\"))){$return_value=$result;}\n elsif \ ( ($result=get_pdb_file1 (\"PDB$pdb_file.PDB\"))){\ $return_value=$result;}\n elsif ( ($result=get_pdb\ _file1 (\"PDB$pdb_file.pdb\"))){$return_value=$res\ ult;}\n \n \n elsif ( ($result=get_pdb_file1 (\"$p\ db_file.ent\"))){$return_value=$result;}\n elsif (\ ($result=get_pdb_file1 (\"pdb$pdb_file.ent\"))){$\ return_value=$result;}\n elsif ( ($result=get_pdb_\ file1 (\"PDB$pdb_file.ent\"))){$return_value=$resu\ lt;}\n\n elsif ( ($result=get_pdb_file1 (\"$pdb_fi\ le.ENT\"))){$return_value=$result;}\n elsif ( ($re\ sult=get_pdb_file1 (\"pdb$pdb_file.ENT\"))){$retur\ n_value=$result;}\n elsif ( ($result=get_pdb_file1\ (\"PDB$pdb_file.ENT\"))){$return_value=$result;}\\ n \n \n \n}\n return $return_value;\n}\n \ns\ ub get_pdb_file1\n{\n my ($pdb_file)=(@_);\n \ my $return_value;\n \n\n $return_value=\"\"\ ;\n if ( ($result=get_pdb_file0 ($pdb_file))){$\ return_value=$result;}\n elsif ( ($result=get_p\ db_file0 (\"$pdb_file.Z\"))){$return_value=$result\ ;}\n elsif ( ($result=get_pdb_file0 (\"$pdb_fil\ e.gz\"))){$return_value=$result;}\n elsif ( ($r\ esult=get_pdb_file0 (\"$pdb_file.GZ\"))){$return_v\ alue=$result;}\n return $return_value;\n}\nsub \ get_pdb_file0 \n{ \n my ($pdb_file, $attempt)=(\ @_);\n my $pdb_file=@_[0];\n my $tmp_pdb_fil\ e; \n my $return_value;\n\n if ( !$attemp\ t){$attempt=1;}\n \n $local_pdb_file=\"$pdb_\ file\";\n if ( $local_pdb_file eq \"\")\n{\n $t\ mp_pdb_file=vtmpnam();\n open F, \">$tmp_pdb_file\\ ";\n \n while (){print F \"$_\";}\n close (\ F);\n \n if (-e $tmp_pdb_file && &is_pdb_file ( $l\ ocal_pdb_file))\n{return $tmp_pdb_file;}\n}\n\n \ $local_pdb_file=\"$pdb_file\";\n &debug_print \ (\"\\nTry access local file: $local_pdb_file\");\n\ \n $local_pdb_file=&check_pdb_file4compress\ ion ($local_pdb_file);\n if ( -e $local_pdb_fil\ e && (&is_pdb_file ($local_pdb_file) || $force_pdb\ ))\n{\n &debug_print ( \"\\n\\tIs in Current Dir\"\ );\n $tmp_pdb_file=vtmpnam();\n `cp $local_pdb_fil\ e $tmp_pdb_file`;\n return $tmp_pdb_file;\n}\n \ else\n{\n &debug_print (\"\\n\\tFile Not in Curren\ t Dir\");\n}\n\n if ($pdb_file=~/^pdb/||$pdb_fi\ le=~/^PDB/){$pdb_div=substr ($pdb_file, 4, 2);}\n \ else\n{\n $pdb_div=substr ($pdb_file, 1, 2);\\ n}\n $local_pdb_file=\"$pdb_dir/$pdb_div/$pdb_f\ ile\";\n $local_pdb_file=&check_pdb_file4compre\ ssion ( $local_pdb_file);\n &debug_print (\"\\n\ Try access file From PDB_DIR: $local_pdb_file\");\\ n if ($pdb_dir && -e $local_pdb_file && &is_pdb\ _file ($local_pdb_file))\n{\n &debug_print ( \"\\n\ \\tIs in Local PDB DIR\");\n $tmp_pdb_file=vtmpnam\ ();\n `cp $local_pdb_file $tmp_pdb_file`;\n return\ $tmp_pdb_file;\n}\n\n $local_pdb_file=\"$pdb_d\ ir/$pdb_file\";\n $local_pdb_file=&check_pdb_fi\ le4compression ( $local_pdb_file);\n &debug_pri\ nt (\"\\nTry access file From PDB_DIR: local_pdb_f\ ile\");\n if ($pdb_dir && -e $local_pdb_file &&\ &is_pdb_file ($local_pdb_file))\n{\n &debug_print\ ( \"\\n\\tIs in Local PDB DIR\");\n $tmp_pdb_file\ =vtmpnam();\n `cp $local_pdb_file $tmp_pdb_file`;\\ n return $tmp_pdb_file;\n}\n\n $local_pdb_file=\ \"$pdb_dir$pdb_file\";\n $local_pdb_file=&check\ _pdb_file4compression ( $local_pdb_file);\n &de\ bug_print (\"\\nTry access file From PDB_DIR: $loc\ al_pdb_file\");\n if ($pdb_dir && -e $local_pdb\ _file && &is_pdb_file ($local_pdb_file))\n{\n &deb\ ug_print ( \"\\n\\tIs in Local PDB DIR\");\n $tmp_\ pdb_file=vtmpnam();\n `cp $local_pdb_file $tmp_pdb\ _file`;\n return $tmp_pdb_file;\n}\n else\n{&de\ bug_print ( \"\\n\\tNot In Local Pdb Dir\");}\n\n \ if ($cache ne \"NO\" && $cache ne \"no\")\n{\n\\ n $local_pdb_file=\"$cache/$pdb_file\";\n $local_p\ db_file=&check_pdb_file4compression ( $local_pdb_f\ ile);\n &debug_print(\"\\nTry access file From Cac\ he: $local_pdb_file\");\n if (-e $local_pdb_file &\ & &is_pdb_file ($local_pdb_file))\n{\n &debug_\ print ( \"\\n\\tIs in T-Coffee Cache\");\n $tm\ p_pdb_file=vtmpnam();\n `cp $local_pdb_file $t\ mp_pdb_file`;\n return $tmp_pdb_file;\n}\n els\ e{&debug_print ( \"\\n\\tNot in Cache Dir\");}\n}\\ n\n if (!$no_remote_pdb_dir) \n{\n\n my $return\ _value=\"\";\n if ( &remote_is_pdb_name ($pdb_file\ , $netaddress)==1)\n{\n &debug_print (\"\\n***\ **************************************************\ **\\nTry Remote Access for $pdb_file\");\n $tm\ p_pdb_file=vtmpnam();\n $netcommand=$netaddres\ s;\n $netcommand=~s/%%/$pdb_file/g;\n &url\ 2file(\"$netcommand\", \"$tmp_pdb_file.$netcompres\ sion\");\n &debug_print(\"\\nREMOTE: $netcomma\ nd\\n\");\n \n $compressed_tmp_file_name=\"\ $tmp_pdb_file.$netcompression\";\n \n if (\ $netcompression && -B $compressed_tmp_file_name)\n\ {\n my $r;\n &debug_print (\"\\n\\tFile Found Re\ motely\");\n if (($r=safe_system ( \"$netcompress\ ion_pg $compressed_tmp_file_name\")!=$EXIT_SUCCESS\ ) && $attempts<5)\n{\n &debug_print (\"\\n\\t\ Proper Download Failed Try again\");\n unlink\ $compressed_tmp_file_name;\n print \"\\nFail\ ed to Download $compressed_tmp_file_name. New Atte\ mpt $attempt/5\\n\";\n return &get_pdb_file0(\ $pdb_file, $attempt+1);\n}\n elsif ($r== $EXIT_SU\ CCESS)\n{\n &debug_print (\"\\n\\tProper Down\ load Succeeded \");\n $return_value=$tmp_pdb_\ file;\n}\n else\n{\n &debug_print (\"\\n\\tP\ roper Download Failed \");\n &debug_print (\"\ \\nFile Not Found Remotely\");\n unlink $comp\ ressed_tmp_file_name;\n}\n}\n else\n{\n &debu\ g_print (\"\\nFile Not Found Remotely\");\n unlin\ k $compressed_tmp_file_name;\n}\n if ($cache n\ e \"no\" && $cache ne \"update\" && -e $return_val\ ue)\n{\n `cp $return_value $cache/$pdb_file.pdb`;\ \n}\n}\n &debug_print (\"\\nRemote Download Finish\ ed\");\n return $return_value;\n}\n return \"\"\ ;\n}\n\nsub check_pdb_file4compression \n{\n my\ $file=@_[0];\n my $tmp;\n my $r;\n \n \ $tmp=&vtmpnam();\n if (-e $tmp){unlink $tmp;}\\ n \n $file=~s/\\/\\//\\//g;\n if (-B $\ file && ($file=~/\\.Z/)) {`cp $file $tmp.Z`;`rm $t\ mp`;`gunzip $tmp.Z $SILENT`;$r=$tmp;}\n elsif (\ -B $file && ($file=~/\\.gz/)){`cp $file $tmp.gz`;`\ gunzip $tmp.gz $SILENT`;return $r=$tmp;}\n elsi\ f (-B $file ){`cp $file $tmp.gz`;`gunzip $tmp.gz $\ SILENT`;$r=$tmp;}\n elsif ( -e $file ) {$r= $fi\ le;}\n elsif ( -e \"$file.gz\" ){ `cp $file.gz \ $tmp.gz`;`gunzip $tmp.gz $SILENT`;$r=$tmp;} \ \n elsif ( -e \"$file.Z\") {`cp $file.Z $tmp.\ Z`; `gunzip $tmp.Z $SILENT`;$r=$tmp;}\n else {\ $r= $file;}\n\n if ( -e \"$tmp.Z\"){unlink \"$t\ mp.Z\";}\n if ( -e \"$tmp.gz\"){unlink \"$tmp.g\ z\";}\n \n return $r;\n \n}\n\nsub vtmpna\ m\n{\n my $tmp_file_name;\n $tmp_name_counte\ r++;\n $tmp_file_name=\"tmp_file_for_extract_fr\ om_pdb$$.$tmp_name_counter\";\n $tmp_file_list[\ $ntmp_file++]=$tmp_file_name;\n if ( -e $tmp_fi\ le_name) {return &vtmpnam ();}\n else {return $\ tmp_file_name;}\n}\n\n\n\n \n\n\nsub safe_syste\ m \n{\n my $com=@_[0];\n my $pid;\n my $status;\ \n if ($com eq \"\"){return 1;}\n if (($pid = fo\ rk ()) < 0){return (-1);}\n if ($pid == 0)\n{\n \ exec ($com);\n}\n else\n{\n $PIDCHILD=$pid;\n\ }\n \n waitpid ($pid,WTERMSIG);\n return $?; #c\ ontains the status of the exit\n}\nEND {\n kill (\ $PIDCHILD);\n clean(@tmp_file_list);\n}\nsub myex\ it\n{\n my $exit_status=@_[0];\n \n &clea\ n(@tmp_file_list);\n exit ( $exit_status);\n}\n\ \nsub clean\n{\n my @fl=@_;\n my $file;\n \n\n \ if ( $debug){print STDERR \"remove $#fl files\\n\ \";}\n\n foreach $file ( @fl)\n{\n if (-e $f\ ile)\n{\n if ( $debug){print STDERR \"\\n$file [\ NOT DELETED]\";}\n else{unlink ($file);} \n}\n}\\ n}\nsub vfopen \n{\n my $file=@_[0];\n my $m\ ode=@_[1];\n my $tmp;\n my $F = new FileHand\ le;\n \n \n $tmp=$file;\n \n \n if \ ( $mode eq \"r\" && !-e $file){ die \"Cannot open \ file $file [FATAL: EXTRACT_FROM_PDB]\\n\";}\n e\ lsif ($mode eq \"w\"){$tmp=\">$file\";}\n elsif\ ($mode eq \"a\"){$tmp=\">>$file\";}\n \n \n\ open ($F,$tmp);\n return $F;\n}\nsub debug_\ print\n{\n my $message =@_[0];\n if ($debug)\ {print STDERR \"NO_REMOTE_PDB_DIR: $no_remote_pdb_\ dir - $message [DEBUG:extract_from_pdb]\";}\n r\ eturn;\n}\nsub is_aa \n{\n my ($aa, $chain) =@_\ ;\n\n my $one;\n my $trhee;\n \n if ( \ $onelett{$molecule_type{$chain}}->{$aa} eq 'X' || \ !$onelett{$molecule_type{$chain}}->{$aa} ){return \ '';}\n else\n{\n $one=$onelett{$molecule_type{$\ chain}}->{$aa};\n\n $three=$threelett{$molecule_ty\ pe{$chain}}->{$one};\n \n\n return $three;\n}\n\n}\ \nsub pg_is_installed\n{\n my @ml=@_;\n my $\ r, $p, $m;\n my $supported=0;\n \n my $p=\ shift (@ml);\n $r=`which $p 2>/dev/null`;\n \ if ($r eq \"\"){return 0;}\n else {return 1;}\n\ }\nsub check_pg_is_installed\n{\n my @ml=@_;\n \ my $r=&pg_is_installed (@ml);\n if (!$r)\n{\\ n print STDERR \"\\nProgram $p Supported but Not I\ nstalled on your system [FATAL:tc_generic_method]\\ \n\";\n myexit ($EXIT_FAILURE);\n}\n else\n{\n \ return 1;\n}\n}\n\nsub url2file\n{\n my ($addre\ ss, $out, $wget_arg, $curl_arg)=(@_);\n my ($pg\ , $flag, $r, $arg, $count);\n \n if ( $INTER\ NET==-1)\n{\n $INTERNET=1;\n $INTERNET=&check_inte\ rnet_connection();\n}\n if ($INTERNET==0){exit(\ $EXIT_FAILURE);}\n \n if (&pg_is_installed (\\ "wget\")) {$pg=\"wget\"; $flag=\"-O\";$arg=$wget\ _arg;}\n elsif (&pg_is_installed (\"curl\")){$p\ g=\"curl\"; $flag=\"-o\";$arg=$curl_arg;}\n els\ e\n{\n print stderr \"ERROR: neither curl nor wget\ are installed. Imnpossible to tectch remote file \ [FATAL]\\n\";\n exit ($EXIT_FAILURE);\n}\n \n \ $r=safe_system (\"$pg $flag$out $address >/dev/nu\ ll 2>/dev/null\");\n if ($r!=$EXIT_SUCCESS)\n{\\ n unlink $file;\n}\n return $r;\n}\n\n\n\nsub c\ heck_internet_connection\n{\n my $internet;\n \ \n if ( -e \"x\"){unlink (\"x\");}\n url2f\ ile(\"www.google.com\", \"x\");\n \n if ( !-\ e \"x\" || -s \"x\" < 10){$internet=0;}\n else \ {$internet=1;}\n if (-e \"x\"){unlink \"x\";}\n\ return $internet;\n}\n\n\n\nsub pdbfile2chaint\ ype\n {\n my $file=@_[0];\n my %ct;\n my\ $F;\n \n $F=vfopen ($file, \"r\");\n whi\ le (<$F>)\n {\n my $line=$_;\n if ($line =~/^\ ATOM/)\n {\n my $C=substr($line,21,1);\n \ if (!$ct{$C})\n { \n my $r=substr($line,17\ ,3);\n $r=~s/\\s+//;\n if (length ($r)==1){$ct{$\ C}=\"R\";}\n elsif (length ($r)==2){$ct{$C}=\"D\"\ ;}\n elsif (length ($r)==3){$ct{$C}=\"P\";}\n el\ se \n {\n print \"ERROR: Could not read RE\ S_ID field in file $file [FATAL:extract_from_pdb]\\ \n\";die;\n }\n }\n }\n }\n clo\ se ($F);\n return %ct;\n }\n \n \n\n\n\ns\ ub fill_threelett_RNA\n{\n\n my %threelett=(\n 'A'\ , ' A',\n 'T', ' T',\n 'U', ' U',\n 'C', ' C',\ \n 'G', ' G',\n 'I', ' I', #Inosine\n );\n \n re\ turn %threelett;\n\n}\n\n\nsub fill_onelett_RNA\n{\ \n my %onelett=(\n ' A' => 'A',\n ' T' => 'T',\ \n ' U' => 'U',\n ' C' => 'C',\n ' G' => 'G',\n\ 'CSL' => 'X',\n 'UMS' => 'X',\n ' I' => 'I',\n '\ A' => 'A',\n 'T' => 'T',\n 'U' => 'U',\n 'C' => 'C\ ',\n 'G' => 'G',\n 'I' => 'I',\n );\n\n return %on\ elett;\n\n}\n\n\nsub fill_onelett_DNA\n{\n my %o\ nelett=(\n ' DA', 'A',\n ' DT', 'T',\n ' DC', 'C',\ \n ' DG', 'G',\n 'DA', 'A',\n 'DT', 'T',\n 'DC', '\ C',\n 'DG', 'G',\n );\n\n return %onelett;\n\n}\n\\ nsub fill_threelett_DNA\n{\n\n my %threelett=(\n '\ A', ' DA',\n 'T', ' DT',\n 'C', ' DC',\n 'G', ' DG\ ',\n );\n\n return %threelett;\n\n}\n\n\n\n\nsub f\ ill_threelett_prot\n{ \n my %threelett;\n\n %th\ reelett=(\n'A', 'ALA',\n'C', 'CYS',\n'D', 'ASP',\n\ 'E', 'GLU',\n'F', 'PHE',\n'G', 'GLY',\n'H', 'HIS',\ \n'I', 'ILE',\n'K', 'LYS',\n'L', 'LEU',\n'N', 'ASN\ ',\n'M', 'MET',\n'P', 'PRO',\n'Q', 'GLN',\n'R', 'A\ RG',\n'S', 'SER',\n'T', 'THR',\n'V', 'VAL',\n'W', \ 'TRP',\n'Y', 'TYR',\n);\n\nreturn %threelett;\n\n\\ n}\n\nsub fill_onelett_prot\n{\n my %onelett;\n\ \n %onelett=(\n\n'10A', 'X',\n'11O', 'X',\n\ '12A', 'X',\n'13P', 'X',\n'13R', 'X',\n'13S', 'X',\ \n'14W', 'X',\n'15P', 'X',\n'16A', 'X',\n'16G', 'X\ ',\n'1AN', 'X',\n'1AP', 'X',\n'1AR', 'X',\n'1BH', \ 'X',\n'1BO', 'X',\n'1C5', 'X',\n'1CU', 'X',\n'1DA'\ , 'X',\n'1GL', 'X',\n'1GN', 'X',\n'1IN', 'X',\n'1L\ U', 'L',\n'1MA', 'X',\n'1MC', 'X',\n'1MG', 'X',\n'\ 1MZ', 'X',\n'1NA', 'X',\n'1NB', 'X',\n'1NI', 'X',\\ n'1PA', 'A',\n'1PC', 'X',\n'1PE', 'X',\n'1PG', 'X'\ ,\n'1PI', 'A',\n'1PM', 'X',\n'1PN', 'X',\n'1PU', '\ X',\n'1PY', 'X',\n'1UN', 'X',\n'24T', 'X',\n'25T',\ 'X',\n'26P', 'X',\n'2AB', 'X',\n'2AM', 'X',\n'2AN\ ', 'X',\n'2AP', 'X',\n'2AR', 'X',\n'2AS', 'D',\n'2\ BL', 'X',\n'2BM', 'X',\n'2CP', 'X',\n'2DA', 'X',\n\ '2DG', 'X',\n'2DP', 'X',\n'2DT', 'X',\n'2EP', 'X',\ \n'2EZ', 'X',\n'2FG', 'X',\n'2FL', 'X',\n'2FP', 'X\ ',\n'2FU', 'X',\n'2GL', 'X',\n'2GP', 'X',\n'2HP', \ 'X',\n'2IB', 'X',\n'2IP', 'X',\n'2LU', 'L',\n'2MA'\ , 'X',\n'2MD', 'X',\n'2ME', 'X',\n'2MG', 'X',\n'2M\ L', 'L',\n'2MO', 'X',\n'2MR', 'R',\n'2MU', 'X',\n'\ 2MZ', 'X',\n'2NO', 'X',\n'2NP', 'X',\n'2OG', 'X',\\ n'2PA', 'X',\n'2PC', 'X',\n'2PE', 'X',\n'2PG', 'X'\ ,\n'2PH', 'X',\n'2PI', 'X',\n'2PL', 'X',\n'2PP', '\ X',\n'2PU', 'X',\n'2SI', 'X',\n'2TB', 'X',\n'34C',\ 'X',\n'35G', 'X',\n'3AA', 'X',\n'3AD', 'X',\n'3AH\ ', 'H',\n'3AN', 'X',\n'3AP', 'X',\n'3AT', 'X',\n'3\ BT', 'X',\n'3CH', 'X',\n'3CN', 'X',\n'3CO', 'X',\n\ '3CP', 'X',\n'3DR', 'X',\n'3EP', 'X',\n'3FM', 'X',\ \n'3GA', 'X',\n'3GP', 'X',\n'3HB', 'X',\n'3HC', 'X\ ',\n'3HP', 'X',\n'3IB', 'X',\n'3ID', 'X',\n'3IN', \ 'X',\n'3MA', 'X',\n'3MB', 'X',\n'3MC', 'X',\n'3MD'\ , 'D',\n'3MF', 'X',\n'3MP', 'X',\n'3MT', 'X',\n'3O\ L', 'X',\n'3PA', 'X',\n'3PG', 'X',\n'3PO', 'X',\n'\ 3PP', 'X',\n'3PY', 'X',\n'49A', 'X',\n'4AB', 'X',\\ n'4AM', 'X',\n'4AN', 'X',\n'4AP', 'X',\n'4BA', 'X'\ ,\n'4BT', 'X',\n'4CA', 'X',\n'4CO', 'X',\n'4HP', '\ X',\n'4IP', 'X',\n'4MO', 'X',\n'4MV', 'X',\n'4MZ',\ 'X',\n'4NC', 'X',\n'4NP', 'X',\n'4OX', 'X',\n'4PB\ ', 'X',\n'4PN', 'X',\n'4PP', 'X',\n'4SC', 'X',\n'4\ SU', 'X',\n'4TB', 'X',\n'55C', 'X',\n'5AD', 'X',\n\ '5AN', 'X',\n'5AT', 'X',\n'5CM', 'X',\n'5GP', 'X',\ \n'5HP', 'E',\n'5HT', 'X',\n'5IT', 'X',\n'5IU', 'X\ ',\n'5MB', 'X',\n'5MC', 'X',\n'5MD', 'X',\n'5MP', \ 'X',\n'5MU', 'X',\n'5NC', 'X',\n'5OB', 'X',\n'5PA'\ , 'X',\n'5PV', 'X',\n'6AB', 'X',\n'6CT', 'X',\n'6H\ A', 'X',\n'6HC', 'X',\n'6HG', 'X',\n'6HT', 'X',\n'\ 6IN', 'X',\n'6MO', 'X',\n'6MP', 'X',\n'6PG', 'X',\\ n'6WO', 'X',\n'70U', 'X',\n'7DG', 'X',\n'7HP', 'X'\ ,\n'7I2', 'X',\n'7MG', 'X',\n'7MQ', 'X',\n'7NI', '\ X',\n'87Y', 'X',\n'8AD', 'X',\n'8BR', 'X',\n'8IG',\ 'X',\n'8IN', 'X',\n'8OG', 'X',\n'95A', 'X',\n'9AD\ ', 'X',\n'9AM', 'X',\n'9AP', 'X',\n'9DG', 'X',\n'9\ DI', 'X',\n'9HX', 'X',\n'9OH', 'X',\n'9TA', 'X',\n\ 'A12', 'X',\n'A15', 'X',\n'A23', 'X',\n'A24', 'X',\ \n'A26', 'X',\n'A2G', 'X',\n'A2P', 'X',\n'A32', 'X\ ',\n'A3P', 'X',\n'A4P', 'X',\n'A5P', 'X',\n'A70', \ 'X',\n'A76', 'X',\n'A77', 'X',\n'A78', 'X',\n'A79'\ , 'X',\n'A80', 'X',\n'A85', 'X',\n'A88', 'X',\n'A9\ A', 'X',\n'AA3', 'X',\n'AA4', 'X',\n'AA6', 'X',\n'\ AAA', 'X',\n'AAB', 'X',\n'AAC', 'X',\n'AAE', 'X',\\ n'AAG', 'R',\n'AAH', 'X',\n'AAM', 'X',\n'AAN', 'X'\ ,\n'AAP', 'X',\n'AAR', 'R',\n'AAS', 'X',\n'AAT', '\ X',\n'ABA', 'X',\n'ABC', 'X',\n'ABD', 'X',\n'ABE',\ 'X',\n'ABH', 'X',\n'ABI', 'X',\n'ABK', 'X',\n'ABM\ ', 'X',\n'ABN', 'X',\n'ABP', 'X',\n'ABR', 'X',\n'A\ BS', 'X',\n'ABU', 'X',\n'AC1', 'X',\n'AC2', 'X',\n\ 'ACA', 'X',\n'ACB', 'D',\n'ACC', 'C',\n'ACD', 'X',\ \n'ACE', 'X',\n'ACH', 'X',\n'ACI', 'X',\n'ACL', 'R\ ',\n'ACM', 'X',\n'ACN', 'X',\n'ACO', 'X',\n'ACP', \ 'X',\n'ACQ', 'X',\n'ACR', 'X',\n'ACS', 'X',\n'ACT'\ , 'X',\n'ACV', 'V',\n'ACX', 'X',\n'ACY', 'X',\n'AD\ 2', 'X',\n'AD3', 'X',\n'ADC', 'X',\n'ADD', 'X',\n'\ ADE', 'X',\n'ADH', 'X',\n'ADI', 'X',\n'ADM', 'X',\\ n'ADN', 'X',\n'ADP', 'X',\n'ADQ', 'X',\n'ADR', 'X'\ ,\n'ADS', 'X',\n'ADT', 'X',\n'ADU', 'X',\n'ADW', '\ X',\n'ADX', 'X',\n'AE2', 'X',\n'AEA', 'X',\n'AEB',\ 'X',\n'AEI', 'D',\n'AEN', 'X',\n'AET', 'T',\n'AF1\ ', 'X',\n'AF3', 'X',\n'AFA', 'D',\n'AFP', 'X',\n'A\ G7', 'X',\n'AGB', 'X',\n'AGF', 'X',\n'AGL', 'X',\n\ 'AGM', 'R',\n'AGN', 'X',\n'AGP', 'X',\n'AGS', 'X',\ \n'AGU', 'X',\n'AH0', 'X',\n'AH1', 'X',\n'AHA', 'X\ ',\n'AHB', 'D',\n'AHC', 'X',\n'AHF', 'X',\n'AHG', \ 'X',\n'AHH', 'X',\n'AHM', 'X',\n'AHO', 'X',\n'AHP'\ , 'X',\n'AHS', 'X',\n'AHT', 'Y',\n'AHU', 'X',\n'AH\ X', 'X',\n'AI1', 'X',\n'AI2', 'X',\n'AIB', 'X',\n'\ AIC', 'X',\n'AIM', 'X',\n'AIP', 'X',\n'AIQ', 'X',\\ n'AIR', 'X',\n'AJ3', 'X',\n'AKB', 'X',\n'AKG', 'X'\ ,\n'AKR', 'X',\n'AL1', 'X',\n'AL2', 'X',\n'AL3', '\ X',\n'AL4', 'X',\n'AL5', 'X',\n'AL6', 'X',\n'AL7',\ 'X',\n'AL8', 'X',\n'AL9', 'X',\n'ALA', 'A',\n'ALB\ ', 'X',\n'ALC', 'X',\n'ALD', 'L',\n'ALE', 'X',\n'A\ LF', 'X',\n'ALG', 'X',\n'ALL', 'X',\n'ALM', 'A',\n\ 'ALN', 'A',\n'ALO', 'T',\n'ALP', 'X',\n'ALQ', 'X',\ \n'ALR', 'X',\n'ALS', 'X',\n'ALT', 'A',\n'ALY', 'K\ ',\n'ALZ', 'X',\n'AMA', 'X',\n'AMB', 'X',\n'AMC', \ 'X',\n'AMD', 'X',\n'AMG', 'X',\n'AMH', 'X',\n'AMI'\ , 'X',\n'AML', 'X',\n'AMN', 'X',\n'AMO', 'X',\n'AM\ P', 'X',\n'AMQ', 'X',\n'AMR', 'X',\n'AMS', 'X',\n'\ AMT', 'X',\n'AMU', 'X',\n'AMW', 'X',\n'AMX', 'X',\\ n'AMY', 'X',\n'ANA', 'X',\n'ANB', 'X',\n'ANC', 'X'\ ,\n'AND', 'X',\n'ANE', 'X',\n'ANI', 'X',\n'ANL', '\ X',\n'ANO', 'X',\n'ANP', 'X',\n'ANS', 'X',\n'ANT',\ 'X',\n'AOE', 'X',\n'AOP', 'X',\n'AP1', 'X',\n'AP2\ ', 'X',\n'AP3', 'X',\n'AP4', 'X',\n'AP5', 'X',\n'A\ P6', 'X',\n'APA', 'X',\n'APB', 'X',\n'APC', 'X',\n\ 'APE', 'F',\n'APF', 'X',\n'APG', 'X',\n'APH', 'A',\ \n'API', 'X',\n'APL', 'X',\n'APM', 'X',\n'APN', 'G\ ',\n'APP', 'X',\n'APQ', 'X',\n'APR', 'X',\n'APS', \ 'X',\n'APT', 'X',\n'APU', 'X',\n'APX', 'X',\n'APY'\ , 'X',\n'APZ', 'X',\n'AQS', 'X',\n'AR1', 'X',\n'AR\ 2', 'X',\n'ARA', 'X',\n'ARB', 'X',\n'ARC', 'X',\n'\ ARD', 'X',\n'ARG', 'R',\n'ARH', 'X',\n'ARI', 'X',\\ n'ARM', 'R',\n'ARN', 'X',\n'ARO', 'R',\n'ARP', 'X'\ ,\n'ARQ', 'X',\n'ARS', 'X',\n'AS1', 'R',\n'AS2', '\ X',\n'ASA', 'D',\n'ASB', 'D',\n'ASC', 'X',\n'ASD',\ 'X',\n'ASE', 'X',\n'ASF', 'X',\n'ASI', 'X',\n'ASK\ ', 'D',\n'ASL', 'X',\n'ASM', 'N',\n'ASO', 'X',\n'A\ SP', 'D',\n'ASQ', 'X',\n'ASU', 'X',\n'ATA', 'X',\n\ 'ATC', 'X',\n'ATD', 'X',\n'ATF', 'X',\n'ATG', 'X',\ \n'ATH', 'X',\n'ATM', 'X',\n'ATO', 'X',\n'ATP', 'X\ ',\n'ATQ', 'X',\n'ATR', 'X',\n'ATT', 'X',\n'ATY', \ 'X',\n'ATZ', 'X',\n'AUC', 'X',\n'AUR', 'X',\n'AVG'\ , 'X',\n'AXP', 'X',\n'AYA', 'A',\n'AZ2', 'X',\n'AZ\ A', 'X',\n'AZC', 'X',\n'AZD', 'X',\n'AZE', 'X',\n'\ AZI', 'X',\n'AZL', 'X',\n'AZM', 'X',\n'AZR', 'X',\\ n'AZT', 'X',\n'B12', 'X',\n'B1F', 'F',\n'B2A', 'A'\ ,\n'B2F', 'F',\n'B2I', 'I',\n'B2V', 'V',\n'B3I', '\ X',\n'B3P', 'X',\n'B7G', 'X',\n'B96', 'X',\n'B9A',\ 'X',\n'BA1', 'X',\n'BAA', 'X',\n'BAB', 'X',\n'BAC\ ', 'X',\n'BAF', 'X',\n'BAH', 'X',\n'BAI', 'X',\n'B\ AK', 'X',\n'BAL', 'A',\n'BAM', 'X',\n'BAO', 'X',\n\ 'BAP', 'X',\n'BAR', 'X',\n'BAS', 'X',\n'BAT', 'F',\ \n'BAY', 'X',\n'BAZ', 'X',\n'BB1', 'X',\n'BB2', 'X\ ',\n'BBA', 'X',\n'BBH', 'X',\n'BBS', 'X',\n'BBT', \ 'X',\n'BBZ', 'X',\n'BCA', 'X',\n'BCB', 'X',\n'BCC'\ , 'X',\n'BCD', 'X',\n'BCL', 'X',\n'BCN', 'X',\n'BC\ R', 'X',\n'BCS', 'C',\n'BCT', 'X',\n'BCY', 'X',\n'\ BCZ', 'X',\n'BDA', 'X',\n'BDG', 'X',\n'BDK', 'X',\\ n'BDM', 'X',\n'BDN', 'X',\n'BDS', 'X',\n'BE1', 'X'\ ,\n'BE2', 'X',\n'BEA', 'X',\n'BEF', 'X',\n'BEN', '\ X',\n'BEO', 'X',\n'BEP', 'X',\n'BER', 'X',\n'BES',\ 'X',\n'BET', 'X',\n'BEZ', 'X',\n'BF2', 'X',\n'BFA\ ', 'X',\n'BFD', 'X',\n'BFP', 'X',\n'BFS', 'X',\n'B\ FU', 'X',\n'BG6', 'X',\n'BGF', 'X',\n'BGG', 'X',\n\ 'BGL', 'X',\n'BGN', 'X',\n'BGP', 'X',\n'BGX', 'X',\ \n'BH4', 'X',\n'BHA', 'X',\n'BHC', 'X',\n'BHD', 'D\ ',\n'BHO', 'X',\n'BHS', 'X',\n'BIC', 'X',\n'BIN', \ 'X',\n'BIO', 'X',\n'BIP', 'X',\n'BIS', 'X',\n'BIZ'\ , 'X',\n'BJH', 'X',\n'BJI', 'X',\n'BJP', 'X',\n'BL\ A', 'X',\n'BLB', 'X',\n'BLE', 'L',\n'BLG', 'P',\n'\ BLI', 'X',\n'BLM', 'X',\n'BLV', 'X',\n'BLY', 'K',\\ n'BM1', 'X',\n'BM2', 'X',\n'BM5', 'X',\n'BM9', 'X'\ ,\n'BMA', 'X',\n'BMD', 'X',\n'BME', 'X',\n'BMP', '\ X',\n'BMQ', 'X',\n'BMS', 'X',\n'BMT', 'T',\n'BMU',\ 'X',\n'BMY', 'X',\n'BMZ', 'X',\n'BNA', 'X',\n'BNG\ ', 'X',\n'BNI', 'X',\n'BNN', 'F',\n'BNO', 'L',\n'B\ NS', 'X',\n'BNZ', 'X',\n'BO3', 'X',\n'BO4', 'X',\n\ 'BOC', 'X',\n'BOG', 'X',\n'BOM', 'X',\n'BOT', 'X',\ \n'BOX', 'X',\n'BOZ', 'X',\n'BPA', 'X',\n'BPB', 'X\ ',\n'BPD', 'X',\n'BPG', 'X',\n'BPH', 'X',\n'BPI', \ 'X',\n'BPJ', 'X',\n'BPM', 'X',\n'BPN', 'X',\n'BPO'\ , 'X',\n'BPP', 'X',\n'BPT', 'X',\n'BPY', 'X',\n'BR\ B', 'X',\n'BRC', 'X',\n'BRE', 'X',\n'BRI', 'X',\n'\ BRL', 'X',\n'BRM', 'X',\n'BRN', 'X',\n'BRO', 'X',\\ n'BRS', 'X',\n'BRU', 'X',\n'BRZ', 'X',\n'BSB', 'X'\ ,\n'BSI', 'X',\n'BSP', 'X',\n'BT1', 'X',\n'BT2', '\ X',\n'BT3', 'X',\n'BTA', 'L',\n'BTB', 'X',\n'BTC',\ 'C',\n'BTD', 'X',\n'BTN', 'X',\n'BTP', 'X',\n'BTR\ ', 'W',\n'BU1', 'X',\n'BUA', 'X',\n'BUB', 'X',\n'B\ UC', 'X',\n'BUG', 'X',\n'BUL', 'X',\n'BUM', 'X',\n\ 'BUQ', 'X',\n'BUT', 'X',\n'BVD', 'X',\n'BX3', 'X',\ \n'BYS', 'X',\n'BZ1', 'X',\n'BZA', 'X',\n'BZB', 'X\ ',\n'BZC', 'X',\n'BZD', 'X',\n'BZF', 'X',\n'BZI', \ 'X',\n'BZM', 'X',\n'BZO', 'X',\n'BZP', 'X',\n'BZQ'\ , 'X',\n'BZS', 'X',\n'BZT', 'X',\n'C02', 'X',\n'C1\ 1', 'X',\n'C1O', 'X',\n'C20', 'X',\n'C24', 'X',\n'\ C2F', 'X',\n'C2O', 'X',\n'C2P', 'X',\n'C3M', 'X',\\ n'C3P', 'X',\n'C3X', 'X',\n'C48', 'X',\n'C4M', 'X'\ ,\n'C4X', 'X',\n'C5C', 'X',\n'C5M', 'X',\n'C5P', '\ X',\n'C5X', 'X',\n'C60', 'X',\n'C6C', 'X',\n'C6M',\ 'X',\n'C78', 'X',\n'C8E', 'X',\n'CA3', 'X',\n'CA5\ ', 'X',\n'CAA', 'X',\n'CAB', 'X',\n'CAC', 'X',\n'C\ AD', 'X',\n'CAF', 'C',\n'CAG', 'X',\n'CAH', 'X',\n\ 'CAL', 'X',\n'CAM', 'X',\n'CAN', 'X',\n'CAO', 'X',\ \n'CAP', 'X',\n'CAQ', 'X',\n'CAR', 'X',\n'CAS', 'C\ ',\n'CAT', 'X',\n'CAV', 'X',\n'CAY', 'C',\n'CAZ', \ 'X',\n'CB3', 'X',\n'CB4', 'X',\n'CBA', 'X',\n'CBD'\ , 'X',\n'CBG', 'X',\n'CBI', 'X',\n'CBL', 'X',\n'CB\ M', 'X',\n'CBN', 'X',\n'CBO', 'X',\n'CBP', 'X',\n'\ CBS', 'X',\n'CBX', 'X',\n'CBZ', 'X',\n'CC0', 'X',\\ n'CC1', 'X',\n'CCC', 'X',\n'CCH', 'X',\n'CCI', 'X'\ ,\n'CCM', 'X',\n'CCN', 'X',\n'CCO', 'X',\n'CCP', '\ X',\n'CCR', 'X',\n'CCS', 'C',\n'CCV', 'X',\n'CCY',\ 'X',\n'CD1', 'X',\n'CDC', 'X',\n'CDE', 'X',\n'CDF\ ', 'X',\n'CDI', 'X',\n'CDL', 'X',\n'CDM', 'X',\n'C\ DP', 'X',\n'CDR', 'X',\n'CDU', 'X',\n'CE1', 'X',\n\ 'CEA', 'C',\n'CEB', 'X',\n'CEC', 'X',\n'CED', 'X',\ \n'CEF', 'X',\n'CEH', 'X',\n'CEM', 'X',\n'CEO', 'X\ ',\n'CEP', 'X',\n'CEQ', 'X',\n'CER', 'X',\n'CES', \ 'G',\n'CET', 'X',\n'CFC', 'X',\n'CFF', 'X',\n'CFM'\ , 'X',\n'CFO', 'X',\n'CFP', 'X',\n'CFS', 'X',\n'CF\ X', 'X',\n'CGN', 'X',\n'CGP', 'X',\n'CGS', 'X',\n'\ CGU', 'E',\n'CH2', 'X',\n'CH3', 'X',\n'CHA', 'X',\\ n'CHB', 'X',\n'CHD', 'X',\n'CHF', 'X',\n'CHG', 'G'\ ,\n'CHI', 'X',\n'CHN', 'X',\n'CHO', 'X',\n'CHP', '\ G',\n'CHR', 'X',\n'CHS', 'F',\n'CHT', 'X',\n'CHX',\ 'X',\n'CIC', 'X',\n'CIN', 'X',\n'CIP', 'X',\n'CIR\ ', 'X',\n'CIT', 'X',\n'CIU', 'X',\n'CKI', 'X',\n'C\ L1', 'X',\n'CL2', 'X',\n'CLA', 'X',\n'CLB', 'A',\n\ 'CLC', 'S',\n'CLD', 'A',\n'CLE', 'L',\n'CLF', 'X',\ \n'CLK', 'S',\n'CLL', 'X',\n'CLM', 'X',\n'CLN', 'X\ ',\n'CLO', 'X',\n'CLP', 'X',\n'CLQ', 'X',\n'CLR', \ 'X',\n'CLS', 'X',\n'CLT', 'X',\n'CLX', 'X',\n'CLY'\ , 'X',\n'CMA', 'R',\n'CMC', 'X',\n'CMD', 'X',\n'CM\ E', 'C',\n'CMG', 'X',\n'CMK', 'X',\n'CMN', 'X',\n'\ CMO', 'X',\n'CMP', 'X',\n'CMR', 'X',\n'CMS', 'X',\\ n'CMT', 'C',\n'CMX', 'X',\n'CNA', 'X',\n'CNC', 'X'\ ,\n'CND', 'X',\n'CNH', 'X',\n'CNM', 'X',\n'CNN', '\ X',\n'CNO', 'X',\n'CNP', 'X',\n'CO2', 'X',\n'CO3',\ 'X',\n'CO5', 'X',\n'CO8', 'X',\n'COA', 'X',\n'COB\ ', 'X',\n'COC', 'X',\n'COD', 'X',\n'COE', 'X',\n'C\ OF', 'X',\n'COH', 'X',\n'COI', 'X',\n'COJ', 'X',\n\ 'COL', 'X',\n'COM', 'X',\n'CON', 'X',\n'COP', 'X',\ \n'COR', 'X',\n'COS', 'X',\n'COT', 'X',\n'COY', 'X\ ',\n'CP1', 'G',\n'CP2', 'X',\n'CP4', 'X',\n'CPA', \ 'X',\n'CPB', 'X',\n'CPC', 'X',\n'CPD', 'X',\n'CPG'\ , 'X',\n'CPH', 'X',\n'CPI', 'X',\n'CPM', 'X',\n'CP\ N', 'G',\n'CPO', 'X',\n'CPP', 'X',\n'CPQ', 'X',\n'\ CPR', 'X',\n'CPS', 'X',\n'CPT', 'X',\n'CPU', 'X',\\ n'CPV', 'X',\n'CPY', 'X',\n'CR1', 'X',\n'CR6', 'X'\ ,\n'CRA', 'X',\n'CRB', 'X',\n'CRC', 'X',\n'CRG', '\ X',\n'CRH', 'X',\n'CRO', 'T',\n'CRP', 'X',\n'CRQ',\ 'X',\n'CRS', 'X',\n'CRT', 'X',\n'CRY', 'X',\n'CSA\ ', 'C',\n'CSB', 'X',\n'CSD', 'C',\n'CSE', 'C',\n'C\ SH', 'X',\n'CSI', 'X',\n'CSN', 'X',\n'CSO', 'C',\n\ 'CSP', 'C',\n'CSR', 'C',\n'CSS', 'C',\n'CST', 'X',\ \n'CSW', 'C',\n'CSX', 'C',\n'CSY', 'X',\n'CSZ', 'C\ ',\n'CT3', 'X',\n'CTA', 'X',\n'CTB', 'X',\n'CTC', \ 'X',\n'CTD', 'X',\n'CTH', 'T',\n'CTO', 'X',\n'CTP'\ , 'X',\n'CTR', 'X',\n'CTS', 'X',\n'CTT', 'X',\n'CT\ Y', 'X',\n'CTZ', 'X',\n'CU1', 'X',\n'CUA', 'X',\n'\ CUC', 'X',\n'CUL', 'X',\n'CUO', 'X',\n'CUZ', 'X',\\ n'CVI', 'X',\n'CXF', 'X',\n'CXL', 'X',\n'CXM', 'M'\ ,\n'CXN', 'X',\n'CXP', 'X',\n'CXS', 'X',\n'CY1', '\ C',\n'CY3', 'X',\n'CYB', 'X',\n'CYC', 'X',\n'CYF',\ 'C',\n'CYG', 'C',\n'CYH', 'X',\n'CYL', 'X',\n'CYM\ ', 'C',\n'CYN', 'X',\n'CYO', 'X',\n'CYP', 'X',\n'C\ YQ', 'C',\n'CYS', 'C',\n'CYU', 'X',\n'CYY', 'X',\n\ 'CYZ', 'X',\n'CZH', 'X',\n'CZZ', 'C',\n'D12', 'X',\ \n'D13', 'X',\n'D16', 'X',\n'D18', 'X',\n'D19', 'X\ ',\n'D1P', 'X',\n'D24', 'X',\n'D34', 'X',\n'D35', \ 'X',\n'D4D', 'X',\n'D4T', 'X',\n'D6G', 'X',\n'DA2'\ , 'R',\n'DA3', 'X',\n'DA6', 'X',\n'DA7', 'X',\n'DA\ A', 'X',\n'DAB', 'X',\n'DAC', 'X',\n'DAD', 'X',\n'\ DAE', 'X',\n'DAF', 'X',\n'DAG', 'X',\n'DAH', 'A',\\ n'DAJ', 'X',\n'DAK', 'X',\n'DAL', 'A',\n'DAM', 'A'\ ,\n'DAN', 'X',\n'DAO', 'X',\n'DAP', 'X',\n'DAQ', '\ X',\n'DAR', 'R',\n'DAS', 'D',\n'DAT', 'X',\n'DAU',\ 'X',\n'DAV', 'X',\n'DBA', 'X',\n'DBD', 'X',\n'DBF\ ', 'X',\n'DBG', 'X',\n'DBI', 'X',\n'DBV', 'X',\n'D\ BY', 'Y',\n'DCA', 'X',\n'DCB', 'X',\n'DCE', 'X',\n\ 'DCF', 'X',\n'DCG', 'X',\n'DCH', 'X',\n'DCI', 'I',\ \n'DCL', 'X',\n'DCM', 'X',\n'DCP', 'X',\n'DCS', 'X\ ',\n'DCT', 'X',\n'DCY', 'C',\n'DCZ', 'X',\n'DDA', \ 'X',\n'DDB', 'X',\n'DDC', 'X',\n'DDF', 'X',\n'DDG'\ , 'X',\n'DDH', 'X',\n'DDL', 'X',\n'DDM', 'X',\n'DD\ O', 'L',\n'DDP', 'X',\n'DDQ', 'X',\n'DDT', 'Y',\n'\ DDU', 'X',\n'DEA', 'X',\n'DEB', 'X',\n'DEC', 'X',\\ n'DEF', 'X',\n'DEL', 'X',\n'DEM', 'X',\n'DEN', 'X'\ ,\n'DEP', 'X',\n'DEQ', 'X',\n'DES', 'X',\n'DET', '\ X',\n'DFC', 'X',\n'DFG', 'X',\n'DFI', 'X',\n'DFL',\ 'X',\n'DFO', 'X',\n'DFP', 'X',\n'DFR', 'X',\n'DFT\ ', 'X',\n'DFV', 'X',\n'DFX', 'X',\n'DG2', 'X',\n'D\ G3', 'X',\n'DG6', 'X',\n'DGA', 'X',\n'DGD', 'X',\n\ 'DGG', 'X',\n'DGL', 'E',\n'DGN', 'Q',\n'DGP', 'X',\ \n'DGT', 'X',\n'DGX', 'X',\n'DH2', 'X',\n'DHA', 'A\ ',\n'DHB', 'X',\n'DHC', 'X',\n'DHD', 'X',\n'DHE', \ 'X',\n'DHF', 'X',\n'DHG', 'X',\n'DHI', 'H',\n'DHL'\ , 'X',\n'DHM', 'X',\n'DHN', 'V',\n'DHP', 'X',\n'DH\ Q', 'X',\n'DHR', 'X',\n'DHS', 'X',\n'DHT', 'X',\n'\ DHU', 'X',\n'DHY', 'X',\n'DHZ', 'X',\n'DI2', 'X',\\ n'DI3', 'G',\n'DI4', 'X',\n'DI5', 'X',\n'DIA', 'X'\ ,\n'DIC', 'X',\n'DIF', 'X',\n'DIG', 'X',\n'DII', '\ X',\n'DIL', 'I',\n'DIM', 'X',\n'DIO', 'X',\n'DIP',\ 'X',\n'DIQ', 'X',\n'DIS', 'X',\n'DIT', 'X',\n'DIV\ ', 'V',\n'DIX', 'X',\n'DIY', 'X',\n'DKA', 'X',\n'D\ LA', 'X',\n'DLE', 'L',\n'DLF', 'X',\n'DLS', 'K',\n\ 'DLY', 'K',\n'DM1', 'X',\n'DM2', 'X',\n'DM3', 'X',\ \n'DM4', 'X',\n'DM5', 'X',\n'DM6', 'X',\n'DM7', 'X\ ',\n'DM8', 'X',\n'DM9', 'X',\n'DMA', 'X',\n'DMB', \ 'X',\n'DMC', 'X',\n'DMD', 'X',\n'DME', 'X',\n'DMF'\ , 'X',\n'DMG', 'G',\n'DMH', 'N',\n'DMI', 'X',\n'DM\ J', 'X',\n'DML', 'X',\n'DMM', 'X',\n'DMN', 'X',\n'\ DMO', 'X',\n'DMP', 'X',\n'DMQ', 'X',\n'DMR', 'X',\\ n'DMS', 'X',\n'DMT', 'X',\n'DMV', 'X',\n'DMY', 'X'\ ,\n'DNC', 'X',\n'DND', 'X',\n'DNH', 'X',\n'DNJ', '\ X',\n'DNN', 'X',\n'DNP', 'X',\n'DNQ', 'X',\n'DNR',\ 'X',\n'DO2', 'X',\n'DO3', 'X',\n'DOA', 'X',\n'DOB\ ', 'X',\n'DOC', 'X',\n'DOH', 'D',\n'DOM', 'X',\n'D\ OS', 'X',\n'DOX', 'X',\n'DP5', 'X',\n'DP7', 'X',\n\ 'DPA', 'X',\n'DPC', 'X',\n'DPD', 'X',\n'DPE', 'X',\ \n'DPG', 'X',\n'DPH', 'F',\n'DPM', 'X',\n'DPN', 'F\ ',\n'DPO', 'X',\n'DPP', 'X',\n'DPR', 'P',\n'DPS', \ 'X',\n'DPT', 'X',\n'DPX', 'X',\n'DPY', 'X',\n'DPZ'\ , 'X',\n'DQH', 'X',\n'DQN', 'X',\n'DR1', 'X',\n'DR\ B', 'X',\n'DRC', 'X',\n'DRI', 'X',\n'DRP', 'X',\n'\ DRT', 'X',\n'DRU', 'X',\n'DSA', 'X',\n'DSB', 'X',\\ n'DSC', 'X',\n'DSD', 'X',\n'DSE', 'S',\n'DSI', 'X'\ ,\n'DSN', 'S',\n'DSP', 'D',\n'DSR', 'X',\n'DSS', '\ X',\n'DSX', 'X',\n'DSY', 'X',\n'DTB', 'X',\n'DTD',\ 'X',\n'DTH', 'T',\n'DTN', 'X',\n'DTO', 'X',\n'DTP\ ', 'X',\n'DTQ', 'X',\n'DTR', 'W',\n'DTT', 'X',\n'D\ TY', 'Y',\n'DUD', 'X',\n'DUO', 'X',\n'DUR', 'X',\n\ 'DUT', 'X',\n'DVA', 'V',\n'DVR', 'X',\n'DX9', 'X',\ \n'DXA', 'X',\n'DXB', 'X',\n'DXC', 'X',\n'DXG', 'X\ ',\n'DXX', 'X',\n'DZF', 'X',\n'E09', 'X',\n'E20', \ 'X',\n'E2P', 'X',\n'E3G', 'X',\n'E4N', 'X',\n'E4P'\ , 'X',\n'E64', 'X',\n'E6C', 'X',\n'E96', 'X',\n'E9\ 7', 'X',\n'EA2', 'X',\n'EAA', 'X',\n'EAP', 'X',\n'\ EBP', 'X',\n'EBW', 'X',\n'ECO', 'X',\n'EDA', 'X',\\ n'EDC', 'X',\n'EDE', 'X',\n'EDO', 'X',\n'EDR', 'X'\ ,\n'EEB', 'X',\n'EEE', 'X',\n'EFC', 'X',\n'EFZ', '\ X',\n'EG1', 'X',\n'EG2', 'X',\n'EG3', 'X',\n'EGC',\ 'X',\n'EGL', 'X',\n'EHP', 'A',\n'EIC', 'X',\n'EJT\ ', 'X',\n'ELA', 'X',\n'EMB', 'X',\n'EMC', 'X',\n'E\ MD', 'X',\n'EMM', 'X',\n'EMO', 'X',\n'EMP', 'X',\n\ 'EMR', 'X',\n'ENA', 'X',\n'ENC', 'X',\n'ENH', 'X',\ \n'ENO', 'X',\n'ENP', 'X',\n'EOA', 'X',\n'EOH', 'X\ ',\n'EOT', 'X',\n'EOX', 'X',\n'EPA', 'X',\n'EPE', \ 'X',\n'EPH', 'X',\n'EPI', 'X',\n'EPN', 'X',\n'EPO'\ , 'X',\n'EPT', 'X',\n'EPU', 'X',\n'EPX', 'X',\n'EP\ Y', 'X',\n'EQI', 'X',\n'EQP', 'X',\n'EQU', 'X',\n'\ ERG', 'X',\n'ERI', 'X',\n'ERY', 'X',\n'ESC', 'X',\\ n'ESD', 'X',\n'ESI', 'X',\n'ESO', 'X',\n'ESP', 'X'\ ,\n'EST', 'X',\n'ESX', 'X',\n'ETA', 'X',\n'ETC', '\ X',\n'ETD', 'X',\n'ETF', 'X',\n'ETH', 'X',\n'ETI',\ 'X',\n'ETN', 'X',\n'ETO', 'X',\n'ETP', 'X',\n'ETR\ ', 'X',\n'ETS', 'X',\n'ETY', 'X',\n'EU3', 'X',\n'E\ UG', 'X',\n'EYS', 'C',\n'F09', 'X',\n'F2B', 'X',\n\ 'F3S', 'X',\n'F42', 'X',\n'F43', 'X',\n'F4S', 'X',\ \n'F6B', 'X',\n'F6P', 'X',\n'F89', 'X',\n'FA1', 'X\ ',\n'FA5', 'F',\n'FAA', 'X',\n'FAB', 'X',\n'FAC', \ 'X',\n'FAD', 'X',\n'FAF', 'X',\n'FAG', 'X',\n'FAM'\ , 'X',\n'FAR', 'X',\n'FAS', 'X',\n'FAT', 'X',\n'FB\ A', 'X',\n'FBE', 'X',\n'FBI', 'X',\n'FBP', 'X',\n'\ FBQ', 'X',\n'FBS', 'X',\n'FBT', 'X',\n'FBU', 'X',\\ n'FCA', 'X',\n'FCB', 'X',\n'FCI', 'X',\n'FCN', 'X'\ ,\n'FCO', 'X',\n'FCR', 'X',\n'FCT', 'X',\n'FCX', '\ X',\n'FCY', 'C',\n'FD1', 'F',\n'FD2', 'F',\n'FD3',\ 'F',\n'FD4', 'F',\n'FDA', 'X',\n'FDC', 'X',\n'FDI\ ', 'X',\n'FDP', 'X',\n'FDS', 'X',\n'FE2', 'X',\n'F\ EA', 'X',\n'FEL', 'X',\n'FEM', 'X',\n'FEN', 'X',\n\ 'FEO', 'X',\n'FEP', 'X',\n'FER', 'X',\n'FES', 'X',\ \n'FFB', 'X',\n'FFC', 'X',\n'FFF', 'X',\n'FFO', 'X\ ',\n'FGL', 'G',\n'FHB', 'X',\n'FHC', 'X',\n'FHP', \ 'X',\n'FHU', 'X',\n'FID', 'X',\n'FII', 'X',\n'FIP'\ , 'X',\n'FK5', 'X',\n'FKA', 'X',\n'FKI', 'X',\n'FK\ P', 'X',\n'FL2', 'X',\n'FL9', 'X',\n'FLA', 'A',\n'\ FLC', 'X',\n'FLD', 'X',\n'FLE', 'L',\n'FLF', 'X',\\ n'FLO', 'X',\n'FLP', 'X',\n'FLT', 'Y',\n'FLU', 'X'\ ,\n'FLX', 'X',\n'FM1', 'X',\n'FM2', 'X',\n'FMA', '\ X',\n'FMB', 'X',\n'FMC', 'X',\n'FME', 'M',\n'FMN',\ 'X',\n'FMP', 'X',\n'FMR', 'X',\n'FMS', 'X',\n'FMT\ ', 'X',\n'FNE', 'X',\n'FNP', 'X',\n'FNS', 'X',\n'F\ OC', 'X',\n'FOE', 'X',\n'FOG', 'F',\n'FOH', 'X',\n\ 'FOK', 'X',\n'FOL', 'X',\n'FON', 'X',\n'FOP', 'X',\ \n'FOR', 'X',\n'FOS', 'X',\n'FPA', 'X',\n'FPC', 'X\ ',\n'FPI', 'X',\n'FPO', 'X',\n'FPP', 'X',\n'FPT', \ 'X',\n'FQP', 'X',\n'FRA', 'X',\n'FRD', 'F',\n'FRU'\ , 'X',\n'FS3', 'X',\n'FS4', 'X',\n'FSB', 'X',\n'FS\ O', 'X',\n'FSX', 'X',\n'FTC', 'X',\n'FTP', 'X',\n'\ FTR', 'W',\n'FTT', 'X',\n'FTY', 'Y',\n'FUA', 'X',\\ n'FUC', 'X',\n'FUM', 'X',\n'FUP', 'X',\n'FVF', 'X'\ ,\n'FXP', 'X',\n'FXV', 'X',\n'FYA', 'F',\n'G16', '\ X',\n'G1P', 'X',\n'G20', 'X',\n'G21', 'X',\n'G23',\ 'X',\n'G26', 'X',\n'G28', 'X',\n'G2F', 'X',\n'G37\ ', 'X',\n'G39', 'X',\n'G3H', 'X',\n'G3P', 'X',\n'G\ 4D', 'X',\n'G6D', 'X',\n'G6P', 'X',\n'G6Q', 'X',\n\ 'G7M', 'X',\n'GA2', 'X',\n'GAA', 'X',\n'GAB', 'X',\ \n'GAC', 'X',\n'GAI', 'X',\n'GAL', 'X',\n'GAM', 'X\ ',\n'GAN', 'X',\n'GAO', 'X',\n'GAP', 'X',\n'GAR', \ 'G',\n'GAS', 'X',\n'GAT', 'X',\n'GBC', 'X',\n'GBI'\ , 'X',\n'GBP', 'X',\n'GBS', 'X',\n'GBX', 'X',\n'GC\ 4', 'X',\n'GCA', 'X',\n'GCD', 'X',\n'GCG', 'G',\n'\ GCH', 'G',\n'GCK', 'X',\n'GCL', 'X',\n'GCM', 'X',\\ n'GCN', 'X',\n'GCO', 'X',\n'GCP', 'X',\n'GCR', 'X'\ ,\n'GCS', 'X',\n'GCU', 'X',\n'GD3', 'X',\n'GDB', '\ X',\n'GDM', 'X',\n'GDN', 'X',\n'GDP', 'X',\n'GDS',\ 'X',\n'GDU', 'X',\n'GE1', 'X',\n'GE2', 'X',\n'GE3\ ', 'X',\n'GEA', 'X',\n'GEL', 'X',\n'GEM', 'X',\n'G\ EN', 'X',\n'GEP', 'X',\n'GER', 'X',\n'GFP', 'X',\n\ 'GGB', 'X',\n'GGL', 'E',\n'GGP', 'X',\n'GHP', 'G',\ \n'GIP', 'X',\n'GIS', 'X',\n'GKR', 'X',\n'GL2', 'X\ ',\n'GL3', 'G',\n'GL4', 'X',\n'GL5', 'X',\n'GL7', \ 'X',\n'GL9', 'X',\n'GLA', 'X',\n'GLB', 'X',\n'GLC'\ , 'X',\n'GLD', 'X',\n'GLE', 'X',\n'GLF', 'X',\n'GL\ G', 'X',\n'GLH', 'Q',\n'GLI', 'X',\n'GLL', 'X',\n'\ GLM', 'G',\n'GLN', 'Q',\n'GLO', 'X',\n'GLP', 'X',\\ n'GLR', 'X',\n'GLS', 'X',\n'GLT', 'X',\n'GLU', 'E'\ ,\n'GLV', 'X',\n'GLW', 'X',\n'GLY', 'G',\n'GLZ', '\ X',\n'GM1', 'X',\n'GMA', 'X',\n'GMC', 'X',\n'GMH',\ 'X',\n'GMP', 'X',\n'GMY', 'X',\n'GN7', 'X',\n'GNA\ ', 'X',\n'GNB', 'X',\n'GNH', 'X',\n'GNP', 'X',\n'G\ NT', 'X',\n'GOA', 'X',\n'GOL', 'X',\n'GOX', 'X',\n\ 'GP1', 'X',\n'GP3', 'X',\n'GP4', 'X',\n'GP6', 'X',\ \n'GP8', 'X',\n'GPB', 'E',\n'GPC', 'X',\n'GPE', 'X\ ',\n'GPG', 'X',\n'GPI', 'X',\n'GPJ', 'X',\n'GPL', \ 'K',\n'GPM', 'X',\n'GPN', 'G',\n'GPP', 'X',\n'GPR'\ , 'X',\n'GPS', 'X',\n'GPX', 'X',\n'GR1', 'X',\n'GR\ 3', 'X',\n'GR4', 'X',\n'GSA', 'X',\n'GSB', 'X',\n'\ GSC', 'G',\n'GSE', 'S',\n'GSH', 'X',\n'GSP', 'X',\\ n'GSR', 'X',\n'GSS', 'X',\n'GT9', 'C',\n'GTA', 'X'\ ,\n'GTB', 'X',\n'GTD', 'X',\n'GTE', 'X',\n'GTH', '\ T',\n'GTN', 'X',\n'GTO', 'X',\n'GTP', 'X',\n'GTR',\ 'X',\n'GTS', 'X',\n'GTT', 'X',\n'GTX', 'X',\n'GTZ\ ', 'X',\n'GU7', 'X',\n'GUA', 'X',\n'GUD', 'X',\n'G\ UM', 'X',\n'GUN', 'X',\n'GUP', 'X',\n'GUR', 'X',\n\ 'GW3', 'X',\n'GZZ', 'X',\n'H2B', 'X',\n'H2P', 'H',\ \n'H2S', 'X',\n'H2U', 'X',\n'H4B', 'X',\n'H5M', 'P\ ',\n'H5P', 'X',\n'HAA', 'X',\n'HAB', 'X',\n'HAC', \ 'A',\n'HAD', 'X',\n'HAE', 'X',\n'HAG', 'X',\n'HAI'\ , 'X',\n'HAM', 'X',\n'HAP', 'X',\n'HAQ', 'X',\n'HA\ R', 'R',\n'HAS', 'X',\n'HAV', 'V',\n'HAX', 'X',\n'\ HAZ', 'X',\n'HBA', 'X',\n'HBC', 'X',\n'HBD', 'X',\\ n'HBI', 'X',\n'HBO', 'X',\n'HBU', 'X',\n'HBY', 'X'\ ,\n'HC0', 'X',\n'HC1', 'X',\n'HC4', 'X',\n'HCA', '\ X',\n'HCC', 'X',\n'HCI', 'X',\n'HCS', 'X',\n'HDA',\ 'X',\n'HDD', 'X',\n'HDF', 'X',\n'HDN', 'X',\n'HDS\ ', 'X',\n'HDZ', 'X',\n'HE1', 'X',\n'HE6', 'X',\n'H\ EA', 'X',\n'HEB', 'X',\n'HEC', 'X',\n'HED', 'X',\n\ 'HEE', 'X',\n'HEF', 'X',\n'HEG', 'X',\n'HEM', 'X',\ \n'HEN', 'X',\n'HEO', 'X',\n'HEP', 'X',\n'HEU', 'X\ ',\n'HEV', 'X',\n'HEX', 'X',\n'HEZ', 'X',\n'HF1', \ 'X',\n'HFA', 'X',\n'HFP', 'X',\n'HGA', 'Q',\n'HGB'\ , 'X',\n'HGC', 'X',\n'HGI', 'X',\n'HGU', 'X',\n'HH\ O', 'X',\n'HHP', 'X',\n'HIB', 'X',\n'HIC', 'H',\n'\ HII', 'X',\n'HIN', 'X',\n'HIO', 'X',\n'HIP', 'H',\\ n'HIS', 'H',\n'HLE', 'X',\n'HLT', 'X',\n'HMA', 'A'\ ,\n'HMB', 'X',\n'HMC', 'X',\n'HMD', 'X',\n'HMF', '\ A',\n'HMG', 'X',\n'HMH', 'X',\n'HMI', 'L',\n'HMM',\ 'X',\n'HMN', 'X',\n'HMO', 'X',\n'HMP', 'X',\n'HMR\ ', 'R',\n'HNI', 'X',\n'HNP', 'X',\n'HOA', 'X',\n'H\ OE', 'X',\n'HOH', 'X',\n'HOM', 'X',\n'HOP', 'X',\n\ 'HOQ', 'X',\n'HP1', 'A',\n'HP2', 'A',\n'HP3', 'X',\ \n'HPA', 'X',\n'HPB', 'X',\n'HPC', 'X',\n'HPD', 'X\ ',\n'HPE', 'A',\n'HPG', 'X',\n'HPH', 'F',\n'HPP', \ 'X',\n'HPQ', 'F',\n'HPR', 'X',\n'HPT', 'X',\n'HPY'\ , 'X',\n'HQO', 'X',\n'HQQ', 'X',\n'HQU', 'X',\n'HR\ G', 'R',\n'HRI', 'X',\n'HSA', 'X',\n'HSE', 'S',\n'\ HSF', 'X',\n'HSM', 'X',\n'HSO', 'H',\n'HSP', 'X',\\ n'HT1', 'X',\n'HT2', 'X',\n'HTA', 'X',\n'HTL', 'X'\ ,\n'HTO', 'X',\n'HTP', 'X',\n'HTR', 'W',\n'HUP', '\ X',\n'HUX', 'X',\n'HV5', 'A',\n'HV7', 'X',\n'HV8',\ 'X',\n'HXA', 'X',\n'HXC', 'X',\n'HXP', 'X',\n'HY1\ ', 'X',\n'HYA', 'X',\n'HYB', 'X',\n'HYD', 'X',\n'H\ YG', 'X',\n'HYP', 'P',\n'I06', 'X',\n'I10', 'X',\n\ 'I11', 'X',\n'I17', 'X',\n'I2P', 'X',\n'I3N', 'X',\ \n'I3P', 'X',\n'I40', 'X',\n'I48', 'X',\n'I4B', 'X\ ',\n'I52', 'X',\n'I5P', 'X',\n'I84', 'G',\n'IAG', \ 'G',\n'IAS', 'X',\n'IB2', 'X',\n'IBB', 'X',\n'IBP'\ , 'X',\n'IBR', 'X',\n'IBS', 'X',\n'IBZ', 'X',\n'IC\ 1', 'X',\n'ICA', 'X',\n'ICI', 'X',\n'ICL', 'X',\n'\ ICP', 'X',\n'ICT', 'X',\n'ICU', 'X',\n'ID2', 'X',\\ n'IDC', 'X',\n'IDG', 'X',\n'IDH', 'X',\n'IDM', 'X'\ ,\n'IDO', 'X',\n'IDP', 'X',\n'IDR', 'X',\n'IDS', '\ X',\n'IDT', 'X',\n'IDU', 'X',\n'IFG', 'X',\n'IFP',\ 'X',\n'IGL', 'X',\n'IGN', 'X',\n'IGP', 'X',\n'IGU\ ', 'X',\n'IH1', 'X',\n'IH2', 'X',\n'IH3', 'X',\n'I\ HB', 'X',\n'IHN', 'X',\n'IHP', 'X',\n'IIC', 'X',\n\ 'IIL', 'I',\n'IIP', 'X',\n'IK2', 'X',\n'IKT', 'X',\ \n'ILA', 'I',\n'ILE', 'I',\n'ILG', 'X',\n'ILO', 'X\ ',\n'ILX', 'I',\n'IM1', 'X',\n'IM2', 'X',\n'IMC', \ 'X',\n'IMD', 'X',\n'IME', 'X',\n'IMF', 'X',\n'IMG'\ , 'X',\n'IMH', 'X',\n'IMI', 'X',\n'IML', 'I',\n'IM\ M', 'X',\n'IMN', 'X',\n'IMO', 'X',\n'IMP', 'X',\n'\ IMR', 'X',\n'IMU', 'X',\n'IN0', 'D',\n'IN1', 'R',\\ n'IN2', 'K',\n'IN3', 'L',\n'IN4', 'X',\n'IN5', 'A'\ ,\n'IN6', 'L',\n'IN7', 'X',\n'IN8', 'X',\n'IN9', '\ X',\n'INA', 'L',\n'INB', 'X',\n'INC', 'X',\n'IND',\ 'X',\n'INE', 'X',\n'INF', 'F',\n'ING', 'F',\n'INH\ ', 'R',\n'INI', 'X',\n'INJ', 'X',\n'INK', 'X',\n'I\ NL', 'X',\n'INM', 'X',\n'INN', 'A',\n'INO', 'X',\n\ 'INP', 'X',\n'INQ', 'X',\n'INR', 'X',\n'INS', 'X',\ \n'INT', 'V',\n'INU', 'X',\n'INV', 'X',\n'INW', 'X\ ',\n'INX', 'X',\n'INY', 'X',\n'INZ', 'X',\n'IOA', \ 'X',\n'IOB', 'X',\n'IOC', 'X',\n'IOD', 'X',\n'IOE'\ , 'X',\n'IOF', 'X',\n'IOH', 'X',\n'IOL', 'X',\n'IO\ P', 'X',\n'IP1', 'X',\n'IP2', 'X',\n'IP3', 'X',\n'\ IP4', 'X',\n'IPA', 'X',\n'IPB', 'X',\n'IPD', 'X',\\ n'IPG', 'G',\n'IPH', 'X',\n'IPL', 'X',\n'IPM', 'X'\ ,\n'IPN', 'X',\n'IPO', 'F',\n'IPP', 'X',\n'IPS', '\ X',\n'IPT', 'X',\n'IPU', 'X',\n'IPY', 'A',\n'IQB',\ 'X',\n'IQP', 'X',\n'IQS', 'X',\n'IR3', 'X',\n'IRI\ ', 'X',\n'IRP', 'X',\n'ISA', 'X',\n'ISF', 'X',\n'I\ SO', 'X',\n'ISP', 'X',\n'ISQ', 'X',\n'ISU', 'X',\n\ 'ITM', 'X',\n'ITP', 'X',\n'ITR', 'W',\n'ITS', 'X',\ \n'ITU', 'X',\n'IU5', 'X',\n'IUM', 'X',\n'IUR', 'X\ ',\n'IVA', 'X',\n'IYG', 'G',\n'IYR', 'Y',\n'J77', \ 'X',\n'J78', 'X',\n'J80', 'X',\n'JE2', 'X',\n'JEN'\ , 'X',\n'JST', 'X',\n'K21', 'X',\n'KAH', 'X',\n'KA\ I', 'X',\n'KAM', 'X',\n'KAN', 'X',\n'KAP', 'X',\n'\ KCP', 'X',\n'KCX', 'K',\n'KDO', 'X',\n'KEF', 'X',\\ n'KET', 'X',\n'KGR', 'X',\n'KH1', 'X',\n'KIF', 'X'\ ,\n'KIV', 'V',\n'KNI', 'X',\n'KPH', 'K',\n'KTH', '\ X',\n'KTN', 'X',\n'KTP', 'X',\n'KWT', 'X',\n'L04',\ 'X',\n'L1P', 'X',\n'L24', 'E',\n'L2P', 'X',\n'L34\ ', 'E',\n'L37', 'E',\n'L3P', 'X',\n'L4P', 'X',\n'L\ 75', 'X',\n'LAC', 'X',\n'LAD', 'X',\n'LAK', 'X',\n\ 'LAM', 'X',\n'LAR', 'X',\n'LAT', 'X',\n'LAX', 'X',\ \n'LCO', 'X',\n'LCP', 'X',\n'LCS', 'X',\n'LDA', 'X\ ',\n'LDO', 'L',\n'LDP', 'X',\n'LEA', 'X',\n'LEO', \ 'X',\n'LEU', 'L',\n'LG2', 'X',\n'LG6', 'X',\n'LGC'\ , 'X',\n'LGP', 'X',\n'LHG', 'X',\n'LHY', 'F',\n'LI\ 1', 'X',\n'LIG', 'X',\n'LIL', 'X',\n'LIM', 'X',\n'\ LIN', 'X',\n'LIO', 'X',\n'LIP', 'X',\n'LLA', 'X',\\ n'LLP', 'K',\n'LLY', 'K',\n'LMG', 'X',\n'LML', 'X'\ ,\n'LMT', 'X',\n'LMU', 'X',\n'LMZ', 'X',\n'LNK', '\ X',\n'LNL', 'X',\n'LNO', 'X',\n'LOF', 'X',\n'LOL',\ 'L',\n'LOM', 'X',\n'LOR', 'X',\n'LOS', 'X',\n'LOV\ ', 'L',\n'LOX', 'X',\n'LP1', 'X',\n'LP2', 'R',\n'L\ PA', 'X',\n'LPC', 'X',\n'LPF', 'X',\n'LPL', 'X',\n\ 'LPM', 'X',\n'LPP', 'X',\n'LRB', 'X',\n'LRU', 'X',\ \n'LS1', 'X',\n'LS2', 'X',\n'LS3', 'X',\n'LS4', 'X\ ',\n'LS5', 'X',\n'LTA', 'X',\n'LTL', 'X',\n'LTR', \ 'W',\n'LUM', 'X',\n'LVS', 'L',\n'LXC', 'X',\n'LY2'\ , 'X',\n'LY3', 'X',\n'LYA', 'X',\n'LYB', 'X',\n'LY\ C', 'X',\n'LYD', 'X',\n'LYM', 'K',\n'LYN', 'X',\n'\ LYS', 'K',\n'LYT', 'X',\n'LYW', 'X',\n'LYZ', 'K',\\ n'M1A', 'X',\n'M1G', 'X',\n'M2G', 'X',\n'M3L', 'K'\ ,\n'M6P', 'X',\n'M6T', 'X',\n'M7G', 'X',\n'MA1', '\ X',\n'MA2', 'X',\n'MA3', 'X',\n'MA4', 'X',\n'MA6',\ 'X',\n'MAA', 'A',\n'MAB', 'X',\n'MAC', 'X',\n'MAE\ ', 'X',\n'MAG', 'X',\n'MAH', 'X',\n'MAI', 'R',\n'M\ AK', 'X',\n'MAL', 'X',\n'MAM', 'X',\n'MAN', 'X',\n\ 'MAO', 'X',\n'MAP', 'X',\n'MAR', 'X',\n'MAS', 'X',\ \n'MAT', 'X',\n'MAU', 'X',\n'MAZ', 'X',\n'MBA', 'X\ ',\n'MBD', 'X',\n'MBG', 'X',\n'MBH', 'X',\n'MBN', \ 'X',\n'MBO', 'X',\n'MBR', 'X',\n'MBS', 'X',\n'MBV'\ , 'X',\n'MBZ', 'X',\n'MCA', 'X',\n'MCD', 'X',\n'MC\ E', 'X',\n'MCG', 'G',\n'MCI', 'X',\n'MCN', 'X',\n'\ MCP', 'X',\n'MCT', 'X',\n'MCY', 'X',\n'MD2', 'X',\\ n'MDA', 'X',\n'MDC', 'X',\n'MDG', 'X',\n'MDH', 'X'\ ,\n'MDL', 'X',\n'MDM', 'X',\n'MDN', 'X',\n'MDP', '\ X',\n'ME6', 'X',\n'MEB', 'X',\n'MEC', 'X',\n'MEL',\ 'X',\n'MEN', 'N',\n'MEP', 'X',\n'MER', 'X',\n'MES\ ', 'X',\n'MET', 'M',\n'MEV', 'X',\n'MF2', 'X',\n'M\ F3', 'M',\n'MFB', 'X',\n'MFD', 'X',\n'MFU', 'X',\n\ 'MG7', 'X',\n'MGA', 'X',\n'MGB', 'X',\n'MGD', 'X',\ \n'MGG', 'R',\n'MGL', 'X',\n'MGN', 'Q',\n'MGO', 'X\ ',\n'MGP', 'X',\n'MGR', 'X',\n'MGS', 'X',\n'MGT', \ 'X',\n'MGU', 'X',\n'MGY', 'G',\n'MHB', 'X',\n'MHF'\ , 'X',\n'MHL', 'L',\n'MHM', 'X',\n'MHO', 'M',\n'MH\ S', 'H',\n'MHZ', 'X',\n'MIA', 'X',\n'MIC', 'X',\n'\ MID', 'X',\n'MIL', 'X',\n'MIM', 'X',\n'MIN', 'G',\\ n'MIP', 'X',\n'MIS', 'S',\n'MIT', 'X',\n'MJI', 'X'\ ,\n'MK1', 'X',\n'MKC', 'X',\n'MLA', 'X',\n'MLC', '\ X',\n'MLE', 'L',\n'MLN', 'X',\n'MLT', 'X',\n'MLY',\ 'K',\n'MLZ', 'K',\n'MM3', 'X',\n'MM4', 'X',\n'MMA\ ', 'X',\n'MMC', 'X',\n'MME', 'M',\n'MMO', 'R',\n'M\ MP', 'X',\n'MMQ', 'X',\n'MMT', 'X',\n'MN1', 'X',\n\ 'MN2', 'X',\n'MN3', 'X',\n'MN5', 'X',\n'MN7', 'X',\ \n'MN8', 'X',\n'MNA', 'X',\n'MNB', 'X',\n'MNC', 'X\ ',\n'MNG', 'X',\n'MNL', 'L',\n'MNO', 'X',\n'MNP', \ 'X',\n'MNQ', 'X',\n'MNS', 'X',\n'MNT', 'X',\n'MNV'\ , 'V',\n'MO1', 'X',\n'MO2', 'X',\n'MO3', 'X',\n'MO\ 4', 'X',\n'MO5', 'X',\n'MO6', 'X',\n'MOA', 'X',\n'\ MOB', 'X',\n'MOC', 'X',\n'MOE', 'X',\n'MOG', 'X',\\ n'MOH', 'X',\n'MOL', 'X',\n'MOO', 'X',\n'MOP', 'X'\ ,\n'MOR', 'X',\n'MOS', 'X',\n'MOT', 'X',\n'MOX', '\ X',\n'MP1', 'X',\n'MP3', 'X',\n'MPA', 'X',\n'MPB',\ 'X',\n'MPC', 'X',\n'MPD', 'X',\n'MPG', 'X',\n'MPH\ ', 'M',\n'MPI', 'X',\n'MPJ', 'M',\n'MPL', 'X',\n'M\ PN', 'X',\n'MPO', 'X',\n'MPP', 'X',\n'MPQ', 'G',\n\ 'MPR', 'X',\n'MPS', 'X',\n'MQ0', 'X',\n'MQ7', 'X',\ \n'MQ8', 'X',\n'MQ9', 'X',\n'MQI', 'X',\n'MR2', 'X\ ',\n'MRC', 'X',\n'MRM', 'X',\n'MRP', 'X',\n'MS2', \ 'X',\n'MSA', 'X',\n'MSB', 'X',\n'MSD', 'X',\n'MSE'\ , 'M',\n'MSF', 'X',\n'MSI', 'X',\n'MSO', 'M',\n'MS\ Q', 'X',\n'MST', 'X',\n'MSU', 'X',\n'MTA', 'X',\n'\ MTB', 'X',\n'MTC', 'X',\n'MTD', 'X',\n'MTE', 'X',\\ n'MTF', 'X',\n'MTG', 'X',\n'MTO', 'X',\n'MTS', 'X'\ ,\n'MTT', 'X',\n'MTX', 'X',\n'MTY', 'Y',\n'MUG', '\ X',\n'MUP', 'X',\n'MUR', 'X',\n'MVA', 'V',\n'MW1',\ 'X',\n'MW2', 'X',\n'MXA', 'X',\n'MXY', 'X',\n'MYA\ ', 'X',\n'MYC', 'X',\n'MYG', 'X',\n'MYR', 'X',\n'M\ YS', 'X',\n'MYT', 'X',\n'MZM', 'X',\n'N1T', 'X',\n\ 'N25', 'X',\n'N2B', 'X',\n'N3T', 'X',\n'N4B', 'X',\ \n'NA2', 'X',\n'NA5', 'X',\n'NA6', 'X',\n'NAA', 'X\ ',\n'NAB', 'X',\n'NAC', 'X',\n'NAD', 'X',\n'NAE', \ 'X',\n'NAF', 'X',\n'NAG', 'X',\n'NAH', 'X',\n'NAI'\ , 'X',\n'NAL', 'A',\n'NAM', 'A',\n'NAN', 'X',\n'NA\ O', 'X',\n'NAP', 'X',\n'NAQ', 'X',\n'NAR', 'X',\n'\ NAS', 'X',\n'NAU', 'X',\n'NAV', 'X',\n'NAW', 'X',\\ n'NAX', 'X',\n'NAY', 'X',\n'NBA', 'X',\n'NBD', 'X'\ ,\n'NBE', 'X',\n'NBG', 'X',\n'NBN', 'X',\n'NBP', '\ X',\n'NBS', 'X',\n'NBU', 'X',\n'NCA', 'X',\n'NCB',\ 'A',\n'NCD', 'X',\n'NCH', 'X',\n'NCM', 'X',\n'NCN\ ', 'X',\n'NCO', 'X',\n'NCR', 'X',\n'NCS', 'X',\n'N\ D4', 'X',\n'NDA', 'X',\n'NDC', 'X',\n'NDD', 'X',\n\ 'NDO', 'X',\n'NDP', 'X',\n'NDT', 'X',\n'NEA', 'X',\ \n'NEB', 'X',\n'NED', 'X',\n'NEM', 'H',\n'NEN', 'X\ ',\n'NEO', 'X',\n'NEP', 'H',\n'NEQ', 'X',\n'NES', \ 'X',\n'NET', 'X',\n'NEV', 'X',\n'NFA', 'F',\n'NFE'\ , 'X',\n'NFG', 'X',\n'NFP', 'X',\n'NFS', 'X',\n'NG\ 6', 'X',\n'NGA', 'X',\n'NGL', 'X',\n'NGM', 'X',\n'\ NGO', 'X',\n'NGP', 'X',\n'NGT', 'X',\n'NGU', 'X',\\ n'NH2', 'X',\n'NH3', 'X',\n'NH4', 'X',\n'NHD', 'X'\ ,\n'NHE', 'X',\n'NHM', 'X',\n'NHP', 'X',\n'NHR', '\ X',\n'NHS', 'X',\n'NI1', 'X',\n'NI2', 'X',\n'NIC',\ 'X',\n'NID', 'X',\n'NIK', 'X',\n'NIO', 'X',\n'NIP\ ', 'X',\n'NIT', 'X',\n'NIU', 'X',\n'NIY', 'Y',\n'N\ LA', 'X',\n'NLE', 'L',\n'NLG', 'X',\n'NLN', 'L',\n\ 'NLP', 'L',\n'NM1', 'X',\n'NMA', 'A',\n'NMB', 'X',\ \n'NMC', 'G',\n'NMD', 'X',\n'NME', 'X',\n'NMN', 'X\ ',\n'NMO', 'X',\n'NMQ', 'X',\n'NMX', 'X',\n'NMY', \ 'X',\n'NNH', 'R',\n'NNO', 'X',\n'NO2', 'X',\n'NO3'\ , 'X',\n'NOA', 'X',\n'NOD', 'X',\n'NOJ', 'X',\n'NO\ N', 'X',\n'NOP', 'X',\n'NOR', 'X',\n'NOS', 'X',\n'\ NOV', 'X',\n'NOX', 'X',\n'NP3', 'X',\n'NPA', 'X',\\ n'NPC', 'X',\n'NPD', 'X',\n'NPE', 'X',\n'NPF', 'X'\ ,\n'NPH', 'C',\n'NPI', 'X',\n'NPL', 'X',\n'NPN', '\ X',\n'NPO', 'X',\n'NPP', 'X',\n'NPT', 'X',\n'NPY',\ 'X',\n'NRG', 'R',\n'NRI', 'X',\n'NS1', 'X',\n'NS5\ ', 'X',\n'NSP', 'X',\n'NTA', 'X',\n'NTB', 'X',\n'N\ TC', 'X',\n'NTH', 'X',\n'NTM', 'X',\n'NTP', 'X',\n\ 'NTS', 'X',\n'NTU', 'X',\n'NTZ', 'X',\n'NU1', 'X',\ \n'NVA', 'V',\n'NVI', 'X',\n'NVP', 'X',\n'NW1', 'X\ ',\n'NYP', 'X',\n'O4M', 'X',\n'OAA', 'X',\n'OAI', \ 'X',\n'OAP', 'X',\n'OAR', 'X',\n'OAS', 'S',\n'OBA'\ , 'X',\n'OBN', 'X',\n'OC1', 'X',\n'OC2', 'X',\n'OC\ 3', 'X',\n'OC4', 'X',\n'OC5', 'X',\n'OC6', 'X',\n'\ OC7', 'X',\n'OCL', 'X',\n'OCM', 'X',\n'OCN', 'X',\\ n'OCO', 'X',\n'OCP', 'X',\n'OCS', 'C',\n'OCT', 'X'\ ,\n'OCV', 'K',\n'OCY', 'C',\n'ODA', 'X',\n'ODS', '\ X',\n'OES', 'X',\n'OET', 'X',\n'OF1', 'X',\n'OF2',\ 'X',\n'OF3', 'X',\n'OFL', 'X',\n'OFO', 'X',\n'OHE\ ', 'X',\n'OHO', 'X',\n'OHT', 'X',\n'OIC', 'X',\n'O\ IP', 'X',\n'OKA', 'X',\n'OLA', 'X',\n'OLE', 'X',\n\ 'OLI', 'X',\n'OLO', 'X',\n'OMB', 'X',\n'OMC', 'X',\ \n'OMD', 'X',\n'OME', 'X',\n'OMG', 'X',\n'OMP', 'X\ ',\n'OMT', 'M',\n'OMU', 'X',\n'ONE', 'X',\n'ONL', \ 'L',\n'ONP', 'X',\n'OPA', 'X',\n'OPD', 'X',\n'OPE'\ , 'X',\n'OPG', 'X',\n'OPH', 'X',\n'OPN', 'X',\n'OP\ P', 'X',\n'OPR', 'R',\n'ORN', 'X',\n'ORO', 'X',\n'\ ORP', 'X',\n'OSB', 'X',\n'OSS', 'X',\n'OTA', 'X',\\ n'OTB', 'X',\n'OTE', 'X',\n'OTG', 'X',\n'OUT', 'X'\ ,\n'OVA', 'X',\n'OWQ', 'X',\n'OXA', 'X',\n'OXE', '\ X',\n'OXI', 'X',\n'OXL', 'X',\n'OXM', 'X',\n'OXN',\ 'X',\n'OXO', 'X',\n'OXP', 'X',\n'OXS', 'X',\n'OXY\ ', 'X',\n'P11', 'A',\n'P24', 'X',\n'P28', 'X',\n'P\ 2P', 'X',\n'P2U', 'X',\n'P3M', 'X',\n'P4C', 'X',\n\ 'P4P', 'X',\n'P5P', 'X',\n'P6G', 'X',\n'PA1', 'X',\ \n'PA2', 'X',\n'PA3', 'X',\n'PA4', 'X',\n'PA5', 'X\ ',\n'PAA', 'X',\n'PAB', 'X',\n'PAC', 'X',\n'PAD', \ 'X',\n'PAE', 'X',\n'PAG', 'X',\n'PAH', 'X',\n'PAI'\ , 'X',\n'PAL', 'D',\n'PAM', 'X',\n'PAN', 'X',\n'PA\ O', 'X',\n'PAP', 'A',\n'PAQ', 'F',\n'PAR', 'X',\n'\ PAS', 'X',\n'PAT', 'W',\n'PBA', 'X',\n'PBB', 'X',\\ n'PBC', 'X',\n'PBF', 'F',\n'PBG', 'X',\n'PBI', 'X'\ ,\n'PBM', 'X',\n'PBN', 'X',\n'PBP', 'X',\n'PBR', '\ X',\n'PBZ', 'X',\n'PC2', 'X',\n'PCA', 'E',\n'PCB',\ 'X',\n'PCD', 'X',\n'PCE', 'X',\n'PCG', 'X',\n'PCH\ ', 'X',\n'PCL', 'X',\n'PCM', 'X',\n'PCP', 'X',\n'P\ CR', 'X',\n'PCS', 'X',\n'PCU', 'X',\n'PCV', 'X',\n\ 'PCY', 'X',\n'PD1', 'X',\n'PDA', 'X',\n'PDC', 'X',\ \n'PDD', 'A',\n'PDE', 'A',\n'PDI', 'X',\n'PDL', 'A\ ',\n'PDN', 'X',\n'PDO', 'X',\n'PDP', 'X',\n'PDT', \ 'X',\n'PDU', 'X',\n'PE2', 'X',\n'PE6', 'X',\n'PEA'\ , 'X',\n'PEB', 'X',\n'PEC', 'X',\n'PED', 'X',\n'PE\ E', 'X',\n'PEF', 'X',\n'PEG', 'X',\n'PEL', 'X',\n'\ PEO', 'X',\n'PEP', 'X',\n'PEQ', 'X',\n'PER', 'X',\\ n'PET', 'X',\n'PFB', 'X',\n'PFC', 'X',\n'PFG', 'X'\ ,\n'PFL', 'X',\n'PFM', 'X',\n'PFZ', 'X',\n'PG4', '\ X',\n'PG5', 'X',\n'PG6', 'X',\n'PGA', 'X',\n'PGC',\ 'X',\n'PGD', 'X',\n'PGE', 'X',\n'PGG', 'G',\n'PGH\ ', 'X',\n'PGL', 'X',\n'PGO', 'X',\n'PGP', 'X',\n'P\ GQ', 'X',\n'PGR', 'X',\n'PGS', 'X',\n'PGU', 'X',\n\ 'PGX', 'X',\n'PGY', 'G',\n'PH1', 'X',\n'PH2', 'X',\ \n'PH3', 'X',\n'PHA', 'F',\n'PHB', 'X',\n'PHC', 'X\ ',\n'PHD', 'X',\n'PHE', 'F',\n'PHG', 'X',\n'PHH', \ 'X',\n'PHI', 'F',\n'PHL', 'F',\n'PHM', 'X',\n'PHN'\ , 'X',\n'PHO', 'X',\n'PHP', 'X',\n'PHQ', 'X',\n'PH\ S', 'H',\n'PHT', 'X',\n'PHW', 'P',\n'PHY', 'X',\n'\ PI1', 'X',\n'PI2', 'X',\n'PI3', 'X',\n'PI4', 'X',\\ n'PI5', 'X',\n'PI6', 'X',\n'PI7', 'X',\n'PI8', 'X'\ ,\n'PI9', 'X',\n'PIA', 'X',\n'PIB', 'X',\n'PIC', '\ X',\n'PID', 'X',\n'PIG', 'X',\n'PIH', 'X',\n'PIM',\ 'X',\n'PIN', 'X',\n'PIO', 'X',\n'PIP', 'X',\n'PIQ\ ', 'X',\n'PIR', 'X',\n'PIV', 'X',\n'PKF', 'X',\n'P\ L1', 'X',\n'PL9', 'X',\n'PLA', 'D',\n'PLC', 'X',\n\ 'PLE', 'L',\n'PLG', 'G',\n'PLH', 'X',\n'PLM', 'X',\ \n'PLP', 'X',\n'PLS', 'S',\n'PLT', 'W',\n'PLU', 'L\ ',\n'PLY', 'X',\n'PMA', 'X',\n'PMB', 'X',\n'PMC', \ 'X',\n'PME', 'F',\n'PML', 'X',\n'PMM', 'X',\n'PMO'\ , 'X',\n'PMP', 'X',\n'PMS', 'X',\n'PMY', 'X',\n'PN\ 2', 'X',\n'PNA', 'X',\n'PNB', 'X',\n'PNC', 'G',\n'\ PND', 'X',\n'PNE', 'A',\n'PNF', 'X',\n'PNG', 'X',\\ n'PNI', 'X',\n'PNL', 'X',\n'PNM', 'X',\n'PNN', 'X'\ ,\n'PNO', 'X',\n'PNP', 'X',\n'PNQ', 'X',\n'PNS', '\ X',\n'PNT', 'X',\n'PNU', 'X',\n'PO2', 'X',\n'PO4',\ 'X',\n'POB', 'X',\n'POC', 'X',\n'POL', 'X',\n'POM\ ', 'P',\n'PON', 'X',\n'POP', 'X',\n'POR', 'X',\n'P\ OS', 'X',\n'PP1', 'X',\n'PP2', 'X',\n'PP3', 'A',\n\ 'PP4', 'X',\n'PP5', 'X',\n'PP6', 'X',\n'PP7', 'X',\ \n'PP8', 'N',\n'PP9', 'X',\n'PPB', 'X',\n'PPC', 'X\ ',\n'PPD', 'X',\n'PPE', 'E',\n'PPG', 'X',\n'PPH', \ 'F',\n'PPI', 'X',\n'PPJ', 'V',\n'PPL', 'X',\n'PPM'\ , 'X',\n'PPN', 'A',\n'PPO', 'X',\n'PPP', 'X',\n'PP\ Q', 'X',\n'PPR', 'X',\n'PPS', 'X',\n'PPT', 'X',\n'\ PPU', 'X',\n'PPX', 'F',\n'PPY', 'X',\n'PPZ', 'X',\\ n'PQ0', 'X',\n'PQN', 'X',\n'PQQ', 'X',\n'PR1', 'X'\ ,\n'PR2', 'X',\n'PR3', 'X',\n'PRA', 'X',\n'PRB', '\ X',\n'PRC', 'X',\n'PRD', 'X',\n'PRE', 'X',\n'PRF',\ 'X',\n'PRH', 'X',\n'PRI', 'P',\n'PRL', 'X',\n'PRN\ ', 'X',\n'PRO', 'P',\n'PRP', 'X',\n'PRR', 'A',\n'P\ RS', 'P',\n'PRZ', 'X',\n'PS0', 'X',\n'PSA', 'X',\n\ 'PSD', 'X',\n'PSE', 'X',\n'PSF', 'S',\n'PSG', 'X',\ \n'PSI', 'X',\n'PSO', 'X',\n'PSQ', 'X',\n'PSS', 'X\ ',\n'PST', 'X',\n'PSU', 'X',\n'PT1', 'X',\n'PT3', \ 'X',\n'PTA', 'X',\n'PTC', 'X',\n'PTD', 'X',\n'PTE'\ , 'X',\n'PTH', 'Y',\n'PTL', 'X',\n'PTM', 'Y',\n'PT\ N', 'X',\n'PTO', 'X',\n'PTP', 'X',\n'PTR', 'Y',\n'\ PTS', 'X',\n'PTT', 'X',\n'PTU', 'X',\n'PTY', 'X',\\ n'PUA', 'X',\n'PUB', 'X',\n'PUR', 'X',\n'PUT', 'X'\ ,\n'PVA', 'X',\n'PVB', 'X',\n'PVH', 'H',\n'PVL', '\ X',\n'PXA', 'X',\n'PXF', 'X',\n'PXG', 'X',\n'PXP',\ 'X',\n'PXY', 'X',\n'PXZ', 'X',\n'PY2', 'X',\n'PY4\ ', 'X',\n'PY5', 'X',\n'PY6', 'X',\n'PYA', 'A',\n'P\ YC', 'X',\n'PYD', 'X',\n'PYE', 'X',\n'PYL', 'X',\n\ 'PYM', 'X',\n'PYO', 'X',\n'PYP', 'X',\n'PYQ', 'X',\ \n'PYR', 'X',\n'PYS', 'X',\n'PYT', 'X',\n'PYX', 'X\ ',\n'PYY', 'X',\n'PYZ', 'X',\n'PZQ', 'X',\n'Q82', \ 'X',\n'QNC', 'X',\n'QND', 'X',\n'QSI', 'Q',\n'QTR'\ , 'X',\n'QUA', 'X',\n'QUE', 'X',\n'QUI', 'X',\n'QU\ O', 'X',\n'R11', 'X',\n'R12', 'X',\n'R13', 'X',\n'\ R18', 'X',\n'R1P', 'X',\n'R56', 'X',\n'R5P', 'X',\\ n'RA2', 'X',\n'RAD', 'X',\n'RAI', 'X',\n'RAL', 'X'\ ,\n'RAM', 'X',\n'RAN', 'X',\n'RAP', 'X',\n'RBF', '\ X',\n'RBU', 'X',\n'RCA', 'X',\n'RCL', 'X',\n'RCO',\ 'X',\n'RDC', 'X',\n'RDF', 'W',\n'RE9', 'X',\n'REA\ ', 'X',\n'RED', 'K',\n'REO', 'X',\n'REP', 'X',\n'R\ ET', 'X',\n'RFA', 'X',\n'RFB', 'X',\n'RFL', 'X',\n\ 'RFP', 'X',\n'RG1', 'X',\n'RGS', 'X',\n'RH1', 'X',\ \n'RHA', 'X',\n'RHC', 'X',\n'RHD', 'X',\n'RHM', 'X\ ',\n'RHO', 'X',\n'RHQ', 'X',\n'RHS', 'X',\n'RIA', \ 'X',\n'RIB', 'X',\n'RIC', 'X',\n'RIF', 'X',\n'RIN'\ , 'X',\n'RIP', 'X',\n'RIT', 'X',\n'RMB', 'X',\n'RM\ N', 'X',\n'RMP', 'X',\n'RNG', 'X',\n'RNS', 'X',\n'\ RNT', 'X',\n'RO2', 'X',\n'RO4', 'X',\n'ROC', 'N',\\ n'ROI', 'X',\n'ROM', 'X',\n'RON', 'V',\n'ROP', 'X'\ ,\n'ROS', 'X',\n'ROX', 'X',\n'RPA', 'X',\n'RPD', '\ X',\n'RPH', 'X',\n'RPL', 'X',\n'RPP', 'X',\n'RPR',\ 'X',\n'RPX', 'X',\n'RQ3', 'X',\n'RR1', 'X',\n'RR6\ ', 'X',\n'RRS', 'X',\n'RS1', 'X',\n'RS2', 'X',\n'R\ S7', 'X',\n'RSS', 'X',\n'RTA', 'X',\n'RTB', 'X',\n\ 'RTC', 'X',\n'RTL', 'X',\n'RUB', 'X',\n'RUN', 'X',\ \n'RWJ', 'X',\n'RXP', 'X',\n'S02', 'X',\n'S11', 'X\ ',\n'S1H', 'S',\n'S27', 'X',\n'S2C', 'C',\n'S3P', \ 'X',\n'S4U', 'X',\n'S57', 'X',\n'S58', 'X',\n'S5H'\ , 'X',\n'S6G', 'X',\n'S80', 'X',\n'SAA', 'X',\n'SA\ B', 'X',\n'SAC', 'S',\n'SAD', 'X',\n'SAE', 'X',\n'\ SAF', 'X',\n'SAH', 'C',\n'SAI', 'C',\n'SAL', 'X',\\ n'SAM', 'M',\n'SAN', 'X',\n'SAP', 'X',\n'SAR', 'X'\ ,\n'SAS', 'X',\n'SB1', 'X',\n'SB2', 'X',\n'SB3', '\ X',\n'SB4', 'X',\n'SB5', 'X',\n'SB6', 'X',\n'SBA',\ 'L',\n'SBB', 'X',\n'SBD', 'A',\n'SBI', 'X',\n'SBL\ ', 'A',\n'SBN', 'X',\n'SBO', 'X',\n'SBR', 'X',\n'S\ BS', 'X',\n'SBT', 'X',\n'SBU', 'X',\n'SBX', 'X',\n\ 'SC4', 'X',\n'SCA', 'X',\n'SCC', 'X',\n'SCD', 'X',\ \n'SCH', 'C',\n'SCI', 'X',\n'SCL', 'X',\n'SCM', 'X\ ',\n'SCN', 'X',\n'SCO', 'X',\n'SCP', 'S',\n'SCR', \ 'X',\n'SCS', 'X',\n'SCV', 'C',\n'SCY', 'C',\n'SD8'\ , 'X',\n'SDK', 'X',\n'SDZ', 'X',\n'SE4', 'X',\n'SE\ A', 'X',\n'SEB', 'S',\n'SEC', 'X',\n'SEG', 'A',\n'\ SEI', 'X',\n'SEL', 'S',\n'SEM', 'X',\n'SEO', 'X',\\ n'SEP', 'S',\n'SER', 'S',\n'SES', 'X',\n'SET', 'S'\ ,\n'SEU', 'X',\n'SF4', 'X',\n'SFG', 'X',\n'SFN', '\ X',\n'SFO', 'X',\n'SGA', 'X',\n'SGC', 'X',\n'SGL',\ 'X',\n'SGM', 'X',\n'SGN', 'X',\n'SGP', 'X',\n'SHA\ ', 'X',\n'SHC', 'X',\n'SHF', 'X',\n'SHH', 'X',\n'S\ HP', 'G',\n'SHR', 'E',\n'SHT', 'T',\n'SHU', 'X',\n\ 'SI2', 'X',\n'SIA', 'X',\n'SIF', 'X',\n'SIG', 'X',\ \n'SIH', 'X',\n'SIM', 'X',\n'SIN', 'X',\n'SKD', 'X\ ',\n'SKF', 'X',\n'SLB', 'X',\n'SLE', 'X',\n'SLZ', \ 'K',\n'SMA', 'X',\n'SMC', 'C',\n'SME', 'M',\n'SML'\ , 'X',\n'SMM', 'M',\n'SMN', 'X',\n'SMP', 'X',\n'SM\ S', 'X',\n'SN1', 'X',\n'SN6', 'X',\n'SN7', 'X',\n'\ SNC', 'C',\n'SNN', 'X',\n'SNP', 'X',\n'SO1', 'X',\\ n'SO2', 'X',\n'SO3', 'X',\n'SO4', 'X',\n'SOA', 'X'\ ,\n'SOC', 'C',\n'SOM', 'X',\n'SOR', 'X',\n'SOT', '\ X',\n'SOX', 'X',\n'SPA', 'X',\n'SPB', 'X',\n'SPC',\ 'X',\n'SPD', 'X',\n'SPE', 'X',\n'SPG', 'X',\n'SPH\ ', 'X',\n'SPI', 'X',\n'SPK', 'X',\n'SPM', 'X',\n'S\ PN', 'X',\n'SPO', 'X',\n'SPP', 'X',\n'SPS', 'X',\n\ 'SPY', 'X',\n'SQU', 'X',\n'SRA', 'X',\n'SRB', 'X',\ \n'SRD', 'X',\n'SRL', 'X',\n'SRM', 'X',\n'SRS', 'X\ ',\n'SRY', 'X',\n'SSA', 'X',\n'SSB', 'X',\n'SSG', \ 'X',\n'SSP', 'X',\n'ST1', 'X',\n'ST2', 'X',\n'ST3'\ , 'X',\n'ST4', 'X',\n'ST5', 'X',\n'ST6', 'X',\n'ST\ A', 'X',\n'STB', 'X',\n'STE', 'X',\n'STG', 'X',\n'\ STI', 'X',\n'STL', 'X',\n'STN', 'X',\n'STO', 'X',\\ n'STP', 'X',\n'STR', 'X',\n'STU', 'X',\n'STY', 'Y'\ ,\n'SU1', 'X',\n'SU2', 'X',\n'SUC', 'X',\n'SUI', '\ X',\n'SUL', 'X',\n'SUR', 'X',\n'SVA', 'S',\n'SWA',\ 'X',\n'T16', 'X',\n'T19', 'X',\n'T23', 'X',\n'T29\ ', 'X',\n'T33', 'X',\n'T3P', 'X',\n'T42', 'A',\n'T\ 44', 'X',\n'T5A', 'X',\n'T6A', 'T',\n'T6P', 'X',\n\ 'T80', 'X',\n'T87', 'X',\n'TA1', 'X',\n'TAA', 'X',\ \n'TAB', 'X',\n'TAC', 'X',\n'TAD', 'X',\n'TAF', 'X\ ',\n'TAM', 'X',\n'TAP', 'X',\n'TAR', 'X',\n'TAS', \ 'X',\n'TAU', 'X',\n'TAX', 'X',\n'TAZ', 'X',\n'TB9'\ , 'X',\n'TBA', 'X',\n'TBD', 'X',\n'TBG', 'G',\n'TB\ H', 'X',\n'TBM', 'T',\n'TBO', 'X',\n'TBP', 'X',\n'\ TBR', 'X',\n'TBS', 'X',\n'TBT', 'X',\n'TBU', 'X',\\ n'TBZ', 'X',\n'TC4', 'X',\n'TCA', 'X',\n'TCB', 'X'\ ,\n'TCH', 'X',\n'TCK', 'X',\n'TCL', 'X',\n'TCM', '\ X',\n'TCN', 'X',\n'TCP', 'X',\n'TCR', 'W',\n'TCS',\ 'X',\n'TCZ', 'X',\n'TDA', 'X',\n'TDB', 'X',\n'TDG\ ', 'X',\n'TDP', 'X',\n'TDR', 'X',\n'TDX', 'X',\n'T\ EA', 'X',\n'TEM', 'X',\n'TEN', 'X',\n'TEO', 'X',\n\ 'TEP', 'X',\n'TER', 'X',\n'TES', 'X',\n'TET', 'X',\ \n'TFA', 'X',\n'TFB', 'X',\n'TFH', 'X',\n'TFI', 'X\ ',\n'TFK', 'X',\n'TFP', 'X',\n'THA', 'X',\n'THB', \ 'X',\n'THC', 'T',\n'THD', 'X',\n'THE', 'X',\n'THF'\ , 'X',\n'THJ', 'X',\n'THK', 'X',\n'THM', 'X',\n'TH\ N', 'X',\n'THO', 'T',\n'THP', 'X',\n'THQ', 'X',\n'\ THR', 'T',\n'THS', 'X',\n'THT', 'X',\n'THU', 'X',\\ n'THX', 'X',\n'THZ', 'X',\n'TI1', 'X',\n'TI2', 'X'\ ,\n'TI3', 'P',\n'TIA', 'X',\n'TIH', 'A',\n'TK4', '\ X',\n'TLA', 'X',\n'TLC', 'X',\n'TLM', 'X',\n'TLN',\ 'X',\n'TLX', 'X',\n'TM5', 'X',\n'TM6', 'X',\n'TMA\ ', 'X',\n'TMB', 'T',\n'TMC', 'X',\n'TMD', 'T',\n'T\ ME', 'X',\n'TMF', 'X',\n'TML', 'K',\n'TMM', 'X',\n\ 'TMN', 'X',\n'TMP', 'X',\n'TMQ', 'X',\n'TMR', 'X',\ \n'TMT', 'X',\n'TMZ', 'X',\n'TNB', 'C',\n'TND', 'X\ ',\n'TNK', 'X',\n'TNP', 'X',\n'TNT', 'X',\n'TOA', \ 'X',\n'TOB', 'X',\n'TOC', 'X',\n'TOL', 'X',\n'TOP'\ , 'X',\n'TOS', 'X',\n'TOT', 'X',\n'TP1', 'G',\n'TP\ 2', 'P',\n'TP3', 'E',\n'TP4', 'E',\n'TP7', 'T',\n'\ TPA', 'X',\n'TPE', 'X',\n'TPF', 'X',\n'TPI', 'X',\\ n'TPL', 'W',\n'TPM', 'X',\n'TPN', 'G',\n'TPO', 'T'\ ,\n'TPP', 'X',\n'TPQ', 'A',\n'TPR', 'P',\n'TPS', '\ X',\n'TPT', 'X',\n'TPV', 'X',\n'TPX', 'X',\n'TPY',\ 'X',\n'TQ3', 'X',\n'TQ4', 'X',\n'TQ5', 'X',\n'TQ6\ ', 'X',\n'TR1', 'X',\n'TRA', 'X',\n'TRB', 'X',\n'T\ RC', 'X',\n'TRD', 'X',\n'TRE', 'X',\n'TRF', 'W',\n\ 'TRG', 'K',\n'TRH', 'X',\n'TRI', 'X',\n'TRJ', 'X',\ \n'TRM', 'X',\n'TRN', 'W',\n'TRO', 'W',\n'TRP', 'W\ ',\n'TRQ', 'X',\n'TRS', 'X',\n'TRX', 'W',\n'TRZ', \ 'X',\n'TS2', 'X',\n'TS3', 'X',\n'TS4', 'X',\n'TS5'\ , 'X',\n'TSA', 'X',\n'TSB', 'X',\n'TSI', 'X',\n'TS\ M', 'X',\n'TSN', 'X',\n'TSP', 'X',\n'TSU', 'X',\n'\ TTA', 'X',\n'TTE', 'X',\n'TTN', 'X',\n'TTO', 'X',\\ n'TTP', 'X',\n'TTX', 'X',\n'TXL', 'X',\n'TYA', 'Y'\ ,\n'TYB', 'Y',\n'TYD', 'X',\n'TYI', 'Y',\n'TYL', '\ X',\n'TYM', 'W',\n'TYN', 'Y',\n'TYQ', 'Y',\n'TYR',\ 'Y',\n'TYS', 'Y',\n'TYV', 'X',\n'TYY', 'A',\n'TZB\ ', 'X',\n'TZC', 'X',\n'TZE', 'X',\n'TZL', 'X',\n'T\ ZO', 'X',\n'TZP', 'X',\n'U01', 'X',\n'U02', 'X',\n\ 'U03', 'X',\n'U04', 'X',\n'U05', 'X',\n'U0E', 'X',\ \n'U10', 'X',\n'U18', 'X',\n'U2G', 'X',\n'U3P', 'X\ ',\n'U49', 'X',\n'U55', 'X',\n'U5P', 'X',\n'U66', \ 'X',\n'U89', 'X',\n'U8U', 'X',\n'UAA', 'X',\n'UAG'\ , 'A',\n'UAP', 'X',\n'UAR', 'X',\n'UC1', 'X',\n'UC\ 2', 'X',\n'UC3', 'X',\n'UC4', 'X',\n'UD1', 'X',\n'\ UD2', 'X',\n'UDP', 'X',\n'UDX', 'X',\n'UFG', 'X',\\ n'UFM', 'X',\n'UFP', 'X',\n'UGA', 'X',\n'UIN', 'X'\ ,\n'UKP', 'A',\n'UM3', 'X',\n'UMA', 'A',\n'UMG', '\ X',\n'UMP', 'X',\n'UNA', 'X',\n'UND', 'X',\n'UNI',\ 'X',\n'UNK', 'X',\n'UNN', 'X',\n'UNX', 'X',\n'UP5\ ', 'X',\n'UP6', 'X',\n'UPA', 'X',\n'UPF', 'X',\n'U\ PG', 'X',\n'UPP', 'X',\n'UQ1', 'X',\n'UQ2', 'X',\n\ 'UQ6', 'X',\n'UR2', 'X',\n'URA', 'X',\n'URE', 'X',\ \n'URF', 'X',\n'URI', 'X',\n'URS', 'X',\n'UTP', 'X\ ',\n'UVC', 'X',\n'UVW', 'X',\n'V35', 'X',\n'V36', \ 'X',\n'V4O', 'X',\n'V7O', 'X',\n'VAA', 'V',\n'VAC'\ , 'X',\n'VAD', 'V',\n'VAF', 'V',\n'VAG', 'X',\n'VA\ L', 'V',\n'VAN', 'X',\n'VAS', 'X',\n'VAX', 'X',\n'\ VDX', 'X',\n'VDY', 'X',\n'VG1', 'X',\n'VIB', 'X',\\ n'VIR', 'X',\n'VIT', 'X',\n'VK3', 'X',\n'VO3', 'X'\ ,\n'VO4', 'X',\n'VS1', 'F',\n'VS2', 'F',\n'VS3', '\ F',\n'VS4', 'F',\n'VXA', 'X',\n'W01', 'X',\n'W02',\ 'X',\n'W03', 'X',\n'W11', 'X',\n'W33', 'X',\n'W35\ ', 'X',\n'W42', 'X',\n'W43', 'X',\n'W54', 'X',\n'W\ 56', 'X',\n'W59', 'X',\n'W71', 'X',\n'W84', 'X',\n\ 'W8R', 'X',\n'W91', 'X',\n'WAY', 'X',\n'WCC', 'X',\ \n'WO2', 'X',\n'WO4', 'X',\n'WRB', 'X',\n'WRR', 'X\ ',\n'WRS', 'X',\n'WW7', 'X',\n'X2F', 'X',\n'X7O', \ 'X',\n'XAA', 'X',\n'XAN', 'X',\n'XAO', 'X',\n'XBB'\ , 'X',\n'XBP', 'X',\n'XDN', 'X',\n'XDP', 'X',\n'XI\ F', 'X',\n'XIM', 'X',\n'XK2', 'X',\n'XL1', 'X',\n'\ XLS', 'X',\n'XMP', 'X',\n'XN1', 'X',\n'XN2', 'X',\\ n'XN3', 'X',\n'XUL', 'X',\n'XV6', 'X',\n'XYD', 'X'\ ,\n'XYH', 'X',\n'XYL', 'X',\n'XYP', 'X',\n'XYS', '\ X',\n'YOF', 'Y',\n'YRR', 'X',\n'YT3', 'X',\n'YZ9',\ 'X',\n'Z34', 'G',\n'Z5A', 'X',\n'ZAF', 'X',\n'ZAP\ ', 'X',\n'ZEB', 'X',\n'ZEN', 'X',\n'ZES', 'X',\n'Z\ ID', 'X',\n'ZMR', 'X',\n'ZN3', 'X',\n'ZNH', 'X',\n\ 'ZNO', 'X',\n'ZO3', 'X',\n'ZPR', 'P',\n'ZRA', 'A',\ \n'ZST', 'X',\n'ZYA', 'A',\n\n\n'ASN','N');\n} \n \ \n\n\n","use Cwd;\nuse File::Path;\nuse FileHand\ le;\nuse strict;\n\n\nour (%MODE, %PG, %ENV_SET, %\ SUPPORTED_OS);\n\n\nour $EXIT_SUCCESS=0;\nour $EXI\ T_FAILURE=1;\nour $INTERNET=0;\n\nour $CP=\"cp \";\ #was causing a crash on MacOSX\nour $SILENT=\">/d\ ev/null 2>/dev/null\";\nour $WEB_BASE=\"http://www\ .tcoffee.org\";\nour $TCLINKDB_ADDRESS=\"$WEB_BASE\ /Resources/tclinkdb.txt\";\nour $OS=get_os();\nour\ $ROOT=&get_root();\nour $CD=cwd();\nour $CDIR=$CD\ ;\nour $HOME=$ENV{'HOME'};\nour $CXX=\"g++\";\nour\ $CXXFLAGS=\"\";\n\nour $CPP=\"g++\";\nour $CPPFLA\ GS=\"\";\n\nour $CC=\"gcc\";\nour $CFLAGS=\"\";\n\\ nour $FC=\"f77\";\nour $FFLAGS=\"\";\n\nmy $instal\ l=\"all\";\nmy $default_update_action=\"no_update\\ ";\nmy @required_applications=(\"wget_OR_curl\");\\ nmy @smode=(\"all\", \"clean\", \"install\");\n\n&\ initialize_PG();\n\nmy $cl=join( \" \", @ARGV);\ni\ f ($#ARGV==-1 || ($cl=~/-h/) ||($cl=~/-H/) )\n {\\ n print \"\\n!!!!!!! ./install t_coffee \ --> installs t_coffee only\";\n print \\ "\\n!!!!!!! ./install all --> in\ stalls all the modes [mcoffee, expresso, psicoffee\ ,rcoffee..]\";\n print \"\\n!!!!!!! ./install \ [mcoffee|rcoffee|..] --> installs the specified m\ ode\";\n print \"\\n!!!!!!! ./install -h \ --> print usage\\n\\n\";\n if ( \ $#ARGV==-1){exit ($EXIT_FAILURE);}\n }\n \ni\ f (($cl=~/-h/) ||($cl=~/-H/) )\n {\n my $m;\n \ print \"\\n\\n!!!!!!! advanced mode\\n\";\n \ foreach $m ((keys (%MODE)),@smode)\n {\n prin\ t \"!!!!!!! ./install $m\\n\";\n }\n \ \n print \"!!!!!!! ./install [target:package|m\ ode|] [-update|-force|-exec=dir|-dis=dir|-root|-tc\ linkdb=file|-] [CC=|FCC=|CXX=|CFLAGS=|CXXFLAGS=]\\\ n\";\n print \"!!!!!!! ./install clean [remo\ ves all executables]\\n\";\n print \"!!!!!!! ./\ install [optional:target] -update [u\ pdates package already installed]\\n\";\n print\ \"!!!!!!! ./install [optional:target] -force \ [Forces recompilation over everything]\\ \n\";\n \n print \"!!!!!!! ./install [option\ al:target] -root [You are running \ as root]\\n\";\n print \"!!!!!!! ./install [opt\ ional:target] -exec=/foo/bar/ [address for t\ he T-Coffee executable]\\n\";\n print \"!!!!!!!\ ./install [optional:target] -dis=/foo/bar/ \ [Address where distributions should be stored]\\n\ \";\n print \"!!!!!!! ./install [optional:targe\ t] -tclinkdb=foo|update [file containing all the \ packages to be installed]\\n\";\n print \"!!!!!\ !! ./install [optional:target] -tclinkdb=foo|updat\ e [file containing all the packages to be install\ ed]\\n\";\n print \"!!!!!!! ./install [optional\ :target] -clean [clean everything]\\ \n\";\n print \"!!!!!!! ./install [optional:tar\ get] -plugins [plugins directory]\\n\\ ";\n print \"!!!!!!! mode:\";\n foreach $m (\ keys(%MODE)){print \"$m \";}\n print \"\\n\";\n\ print \"!!!!!!! Packages:\";\n foreach $m (\ keys (%PG)){print \"$m \";}\n print \"\\n\";\n \ \n print \"\\n\\n\";\n exit ($EXIT_FAILUR\ E);\n }\n\n\n\nmy (@argl)=($cl=~/(\\S+=[^=]+)\\s\\ \w+=/g);\npush (@argl, ($cl=~/(\\S+=[^=]+\\S)\\s*$\ /g));\n\nforeach $a (@argl)\n {\n if ( ($cl=~/\ CXX=(.*)/)){$CXX=$1;}\n if ( ($cl=~/-CC=(.*)/ \ )){$CC=$1;}\n if ( ($cl=~/-FC=(.*)/ )){$FC\ =$1;}\n if ( ($cl=~/-CFLAGS=(.*)/)){$CFLAGS=$1;\ }\n if ( ($cl=~/-CXXFLAGS=(.*)/)){$CXXFLAGS=$1;\ }\n }\nour ($ROOT_INSTALL, $NO_QUESTION, $default\ _update_action,$BINARIES_ONLY,$force, $default_upd\ ate_action, $INSTALL_DIR, $PLUGINS_DIR, $DISTRIBUT\ IONS,$tclinkdb, $proxy, $clean);\nif ( ($cl=~/-roo\ t/)){$ROOT_INSTALL=1;}\nif ( ($cl=~/-no_question/)\ ){$NO_QUESTION=1;}\nif ( ($cl=~/-update/)){$defaul\ t_update_action=\"update\";}\nif ( ($cl=~/-binarie\ s/)){$BINARIES_ONLY=1;}\nif ( ($cl=~/-force/)){$fo\ rce=1;$default_update_action=\"update\"}\nif ( ($c\ l=~/-exec=\\s*(\\S+)/)){$INSTALL_DIR=$1;}\nif ( ($\ cl=~/-plugins=\\s*(\\S+)/)){$PLUGINS_DIR=$1;}\nif \ ( ($cl=~/-dis=\\s*(\\S+)/)){$DISTRIBUTIONS=$1;}\n\\ nif ( ($cl=~/-tclinkdb=\\s*(\\S+)/)){$tclinkdb=$1;\ }\nif ( ($cl=~/-proxy=\\s*(\\S+)/)){$proxy=$1;}\ni\ f ( ($cl=~/-clean/)){$clean=1;}\nif ($tclinkdb){&u\ pdate_tclinkdb ($tclinkdb);}\n\nour $TCDIR=$ENV{DI\ R_4_TCOFFEE};\nour $TCCACHE=$ENV{CACHE_4_TCOFFEE};\ \nour $TCTMP=$ENV{CACHE_4_TCOFFEE};\nour $TCM=$ENV\ {MCOFFEE_4_TCOFFEE};\nour $TCMETHODS=$ENV{METHODS_\ 4_TCOFFEE};\nour $TCPLUGINS=$ENV{PLUGINS_4_TCOFFEE\ };\nour $PLUGINS_DIR=\"\";\nour $INSTALL_DIR=\"\";\ \n\n&add_dir ($TCDIR=\"$HOME/.t_coffee\");\n&add_d\ ir ($TCCACHE=\"$TCDIR/cache\");\n&add_dir ($TCTMP=\ \"$CDIR/tmp\");\n&add_dir ($TCM=\"$TCDIR/mcoffee\"\ );\n&add_dir ($TCMETHODS=\"$TCDIR/methods\");\n&ad\ d_dir ($TCPLUGINS=\"$TCDIR/plugins/$OS\");\n\n\nou\ r $BASE=\"$CD/bin\";\nour $BIN=\"$BASE/binaries/$O\ S\";\nour $DOWNLOAD_DIR=\"$BASE/download\";\nour $\ DOWNLOAD_FILE=\"$DOWNLOAD_DIR/files\";\nour $TMP=\\ "$BASE/tmp\";\n\n&add_dir($BASE);\n&add_dir($BIN);\ \n&add_dir($DOWNLOAD_DIR);\n&add_dir($DOWNLOAD_FIL\ E);\nif (!$DISTRIBUTIONS){$DISTRIBUTIONS=\"$DOWNLO\ AD_DIR/distributions\";}\n&add_dir ($DISTRIBUTIONS\ );\n&add_dir ($TMP);\n\n\nif (!$PLUGINS_DIR && \ !$ROOT_INSTALL){$PLUGINS_DIR=$TCPLUGINS;}\nelsif (\ !$PLUGINS_DIR && $ROOT_INSTALL){$PLUGINS_DIR=\"/u\ sr/local/bin/\";}\n\nif (!$INSTALL_DIR && !$ROO\ T_INSTALL){$INSTALL_DIR=\"$HOME/bin/\";mkpath ($IN\ STALL_DIR);}\nelsif (!$INSTALL_DIR && $ROOT_INSTA\ LL){$INSTALL_DIR=\"/usr/local/bin/\";}\n\nif (-d \\ "mcoffee\"){`cp mcoffee/* $TCM`;}\n\n\nour $ENV_FI\ LE=\"$TCDIR/t_coffee_env\";\n&env_file2putenv ($EN\ V_FILE);\n&set_proxy($proxy);\nmy ($target, $p, $r\ );\n$target=$p;\n\nforeach $p ( ((keys (%PG)),(ke\ ys(%MODE)),(@smode)) )\n {\n if ($ARGV[0] eq $\ p && $target eq \"\"){$target=$p;}\n }\nif ($targ\ et eq \"\"){exit ($EXIT_FAILURE);}\n\n\nforeach $r\ (@required_applications)\n {\n my @app_list;\\ n my $i;\n $i=0;\n \n @app_list=split \ (/_OR_/, $r);\n foreach my $pg (@app_list)\n \ {\n $i+=&pg_is_installed ($pg);\n }\n i\ f ($i==0)\n {\n print \"One of the follo\ wing packages must be installed to proceed: \";\n \ foreach my $pg (@app_list)\n {\n print (\"$\ pg \");\n }\n die;\n }\n }\n\n\n\n\n\n\n&\ sign_license_ni();\n\n\n$PG{C}{compiler}=get_C_com\ piler($CC);\n$PG{Fortran}{compiler}=get_F_compiler\ ($FC);\n$PG{CXX}{compiler}=$PG{CPP}{compiler}=$PG{\ GPP}{compiler}=get_CXX_compiler($CXX);\nif ($CXXFL\ AGS){$PG{CPP}{options}=$PG{GPP}{options}=$PG{CXX}{\ options}=$CXXFLAGS;}\nif ($CFLAGS){$PG{C}{options}\ =$CFLAGS;}\nforeach my $c (keys(%PG))\n {\n my\ $arguments;\n if ($PG{$c}{compiler})\n {\\ n $arguments=\"$PG{$c}{compiler_flag}=$PG{$c}{comp\ iler} \";\n if ($PG{$c}{options})\n {\n $arg\ uments.=\"$PG{$c}{options_flag}=$PG{$c}{options} \\ ";\n }\n $PG{$c}{arguments}=$arguments;\n }\ \n }\n\nif ($PG{$target}){$PG{$target}{install}=1\ ;}\nelse\n {\n foreach my $pg (keys(%PG))\n \ {\n if ( $target eq \"all\" || ($PG{$pg}{mode}=\ ~/$target/))\n {\n $PG{$pg} {install}=1;\n \ }\n }\n }\n\nforeach my $pg (keys(%PG))\n \ {\n if (!$PG{$pg}{update_action}){$PG{$pg}{upda\ te_action}=$default_update_action;}\n elsif ($P\ G{$pg}{update_action} eq \"never\"){$PG{$pg}{insta\ ll}=0;}\n if ( $force && $PG{$pg}{install})\n \ {\n `rm $BIN/$pg $BIN/$pg.exe $SILENT`;\n \ }\n if ($PG{$pg}{update_action} eq \"update\" \ && $PG{$pg}{install}){$PG{$pg}{update}=1;}\n }\n\\ nif (($target=~/clean/))\n {\n print \"-------\ cleaning executables -----\\n\";\n `rm bin/* $\ SILENT`;\n exit ($EXIT_SUCCESS);\n }\n\nif ( !\ $PG{$target}){print \"------- Installing T-Coffee \ Modes\\n\";}\n\nforeach my $m (keys(%MODE))\n {\n\ if ( $target eq \"all\" || $target eq $m)\n \ {\n print \"\\n------- The installer will now i\ nstall the $m components $MODE{$m}{description}\\n\ \";\n foreach my $pg (keys(%PG))\n {\n if ( \ $PG{$pg}{mode} =~/$m/ && $PG{$pg}{install})\n \ {\n if ($PG{$pg}{touched}){print \"------- $PG{\ $pg}{dname}: already processed\\n\";}\n else {$PG\ {$pg}{success}=&install_pg($pg);$PG{$pg}{touched}=\ 1;}\n }\n }\n }\n }\n\nif ( $PG{$tar\ get}){print \"------- Installing Individual Packag\ e\\n\";}\nforeach my $pg (keys (%PG))\n {\n \n\ if ( $PG{$pg}{install} && !$PG{$pg}{touched})\\ n {\n print \"\\n------- Install $pg\\n\";\n \ $PG{$pg}{success}=&install_pg($pg);$PG{$pg}{touche\ d}=1;\n }\n }\nprint \"------- Finishing The\ installation\\n\";\nmy $final_report=&install ($I\ NSTALL_DIR);\n\nprint \"\\n\";\nprint \"**********\ **************************************************\ *********\\n\";\nprint \"******** INS\ TALLATION SUMMARY *****************\\n\";\ \nprint \"****************************************\ *****************************\\n\";\nprint \"-----\ -- SUMMARY package Installation:\\n\";\nforeach my\ $pg (keys(%PG))\n {\n if ( $PG{$pg}{install})\ \n {\n my $bin_status=($PG{$pg}{from_binary} \ && $PG{$pg}{success})?\"[from binary]\":\"\";\n if\ ( $PG{$pg}{new} && !$PG{$pg}{old}) \ {print \"*------ $PG{$pg}{dname}:\ installed $bin_status\\n\"; $PG{$pg}{status}=1;}\\ n elsif ( $PG{$pg}{new} && $PG{$pg}{old}) \ {print \"*------ $PG{$pg}{dna\ me}: updated $bin_status\\n\" ; $PG{$pg}{status}=\ 1;} \n elsif (!$PG{$pg}{new} && $PG{$pg}{old} &&\ !$PG{$pg}{update}){print \"*------ $PG{$pg\ }{dname}: previous\\n\" ; $PG{$pg}{status}=1;}\n e\ lsif (!$PG{$pg}{new} && $PG{$pg}{old} && $PG{$p\ g}{update}){print \"*------ $PG{$pg}{dname}\ : failed update (previous installation available)\\ \n\";$PG{$pg}{status}=0;}\n else \ {print \"*\ ------ $PG{$pg}{dname}: failed installation\ \";$PG{$pg}{status}=0;}\n }\n }\n\nif ( !$PG\ {$target}){print \"*------ SUMMARY mode Installati\ on:\\n\";}\nforeach my $m (keys(%MODE))\n {\n \ if ( $target eq \"all\" || $target eq $m)\n {\ \n my $succesful=1;\n foreach my $pg (keys(%PG))\n\ {\n if (($PG{$pg}{mode}=~/$m/) && $PG{$pg}{\ install} && $PG{$pg}{status}==0)\n {\n $suc\ cesful=0;\n print \"*!!!!!! $PG{$pg}{dname}\ : Missing\\n\";\n }\n }\n if ( $succesful)\ \n {\n $MODE{$m}{status}=1;\n print \"*-\ ----- MODE $MODE{$m}{dname} SUCCESFULY insta\ lled\\n\";\n }\n else\n {\n $MODE{$m}{stat\ us}=0;\n print \"*!!!!!! MODE $MODE{$m}{\ dname} UNSUCCESFULY installed\\n\";\n }\n }\ \n }\n\nif ($clean==1 && ($BASE=~/install4tcoffee\ /) ){print \"*------ Clean Installation Directory:\ $BASE\\n\";`rm -rf $BASE`;}\nforeach my $pg (keys\ (%PG)){if ($PG{$pg}{install} && $PG{$pg}{status}==\ 0){exit ($EXIT_FAILURE);}}\nexit ($EXIT_SUCCESS); \ \n\nsub get_CXX_compiler\n {\n my $c=@_[0];\n\ my (@clist)=(\"g++\");\n \n return get_c\ ompil ($c, @clist);\n }\nsub get_C_compiler\n {\n\ my $c=@_[0];\n my (@clist)=(\"gcc\", \"cc\"\ , \"icc\");\n \n return get_compil ($c, @cli\ st);\n }\n\nsub get_F_compiler\n {\n my ($c)=@\ _[0];\n my @clist=(\"f77\", \"g77\", \"gfortran\ \", \"ifort\");\n return get_compil ($c, @clist\ );\n } \n \nsub get_compil\n {\n my ($f\ av,@clist)=(@_);\n \n #return the first comp\ iler found installed in the system. Check first th\ e favorite\n foreach my $c ($fav,@clist)\n \ {\n if (&pg_is_installed ($c)){return $c;}\n \ }\n return \"\";\n }\nsub exit_if_pg_not_ins\ talled\n {\n my (@arg)=(@_);\n \n foreac\ h my $p (@arg)\n {\n if ( !&pg_is_installed (\ $p))\n {\n print \"!!!!!!!! The $p utility m\ ust be installed for this installation to proceed \ [FATAL]\\n\";\n die;\n }\n }\n retur\ n 1;\n }\nsub set_proxy\n {\n my ($proxy)=(@_\ );\n my (@list,$p);\n \n @list= (\"HTTP_p\ roxy\", \"http_proxy\", \"HTTP_PROXY\", \"ALL_prox\ y\", \"all_proxy\",\"HTTP_proxy_4_TCOFFEE\",\"http\ _proxy_4_TCOFFEE\");\n \n if (!$proxy)\n \ {\n foreach my $p (@list)\n {\n if ( ($ENV\ _SET{$p}) || $ENV{$p}){$proxy=$ENV{$p};}\n }\n \ }\n foreach my $p(@list){$ENV{$p}=$proxy;}\\ n }\n \nsub check_internet_connection\n {\n m\ y $internet;\n \n if ( -e \"x\"){unlink (\"x\ \");}\n if (&pg_is_installed (\"wget\"))\ {`wget www.google.com -Ox >/dev/null 2>/dev/null`;\ }\n elsif (&pg_is_installed (\"curl\")){`cu\ rl www.google.com -ox >/dev/null 2>/dev/null`;}\n \ else\n {\n printf stderr \"\\nERROR: No pg\ for remote file fetching [wget or curl][FATAL]\\n\ \";\n exit ($EXIT_FAILURE);\n }\n \n if\ ( !-e \"x\" || -s \"x\" < 10){$internet=0;}\n \ else {$internet=1;}\n if (-e \"x\"){unlink \"x\\ ";}\n return $internet;\n }\nsub url2file\n {\ \n my ($cmd, $file,$wget_arg, $curl_arg)=(@_);\\ n my ($exit,$flag, $pg, $arg);\n \n if ($\ INTERNET || check_internet_connection ()){$INTERNE\ T=1;}\n else\n {\n print STDERR \"ERROR: N\ o Internet Connection [FATAL:install.pl]\\n\";\n e\ xit ($EXIT_FAILURE);\n }\n \n if (&\ pg_is_installed (\"wget\")){$pg=\"wget\"; $flag\ =\"-O\";$arg=$wget_arg;}\n elsif (&pg_is_insta\ lled (\"curl\")){$pg=\"curl\"; $flag=\"-o\";$ar\ g=$curl_arg;}\n else\n {\n printf stderr \\ "\\nERROR: No pg for remote file fetching [wget or\ curl][FATAL]\\n\";\n exit ($EXIT_FAILURE);\n \ }\n \n \n if (-e $file){unlink($file);}\\ n $exit=system \"$pg $cmd $flag$file $arg\";\n \ return $exit;\n }\n\nsub pg_is_installed\n {\\ n my ($p, $dir)=(@_);\n my ($r,$m);\n my \ ($supported, $language, $compil);\n \n if ( \ $PG{$p})\n {\n $language=$PG{$p}{language2};\\ n $compil=$PG{$language}{compiler};\n }\n \ \n if ( $compil eq \"CPAN\")\n {\n if ( sy\ stem (\"perl -M$p -e 1\")==$EXIT_SUCCESS){return 1\ ;}\n else {return 0;}\n }\n elsif ($dir)\n\ {\n if (-e \"$dir/$p\" || -e \"$dir/$p\\.exe\ \"){return 1;}\n else {return 0;}\n }\n el\ sif (-e \"$PLUGINS_DIR/$p\" || -e \"$PLUGINS_DIR/$\ p.exe\"){return 1;}\n else\n {\n $r=`which\ $p 2>/dev/null`;\n if ($r eq \"\"){return 0;}\n e\ lse {return 1;}\n }\n return 0;\n }\nsub \ install\n {\n my ($new_bin)=(@_);\n my ($co\ pied, $report);\n\n \n if (!$ROOT_INSTALL)\n\ {\n \n if (-e \"$BIN/t_coffee\"){`$CP $BIN/t\ _coffee $INSTALL_DIR`};\n `cp $BIN/* $PLUGINS_DIR`\ ;\n $copied=1;\n }\n else\n {\n $copi\ ed=&root_run (\"You must be root to finalize the i\ nstallation\", \"$CP $BIN/* $INSTALL_DIR $SILENT\"\ );\n }\n \n \n if ( !$copied)\n {\\ n $report=\"*!!!!!! Installation unsuccesful.\ The executables have been left in $BASE/bin\\n\";\ \n }\n elsif ( $copied && $ROOT)\n {\n \ $report=\"*------ Installation succesful. Your ex\ ecutables have been copied in $new_bin and are on \ your PATH\\n\";\n }\n elsif ( $copied && !$ROO\ T)\n {\n $report= \"*!!!!!! T-Coffee and a\ ssociated packages have been copied in: $new_bin\\\ n\";\n $report.=\"*!!!!!! This address is NOT\ in your PATH sytem variable\\n\";\n $report.\ =\"*!!!!!! You can do so by adding the following l\ ine in your ~/.bashrc file:\\n\";\n $report.=\ \"*!!!!!! export PATH=$new_bin:\\$PATH\\n\";\n \ }\n return $report;\n}\n\nsub sign_license_ni\n \ {\n my $F=new FileHandle;\n open ($F, \"lice\ nse.txt\");\n while (<$F>)\n {\n print \"$\ _\";\n }\n close ($F);\n \n return;\\ n }\n\nsub install_pg\n {\n my ($pg)=(@_);\n \ my ($report, $previous, $language, $compiler, $\ return);\n \n if (!$PG{$pg}{install}){return\ 1;}\n \n $previous=&pg_is_installed ($pg);\\ n \n if ($PG{$pg}{update_action} eq \"no_upd\ ate\" && $previous)\n {\n $PG{$pg}{old}=1;\n \ $PG{$pg}{new}=0;\n $return=1;\n }\n else\n\ {\n $PG{$pg}{old}=$previous;\n \n if ($PG{$p\ g} {language2} eq \"Perl\"){&install_perl_package \ ($pg);}\n elsif ($BINARIES_ONLY && &install_binary\ _package ($pg)){$PG{$pg}{from_binary}=1;}\n elsif \ (&install_source_package ($pg)){;}\n else \n {\n\ \n if (!&supported_os($OS))\n {\n \ print \"!!!!!!!! $pg compilation failed, binary un\ supported for $OS\\n\"; \n }\n elsif (!(\ $PG{$pg}{from_binary}=&install_binary_package ($pg\ )))\n {\n print \"!!!!!!!! $pg compilation \ and binary installation failed\\n\";\n }\n \ }\n $PG{$pg}{new}=$return=&pg_is_installed ($pg,\ $BIN);\n }\n\n \n return $return;\n }\\ nsub install_perl_package\n {\n my ($pg)=(@_);\ \n my ($report, $language, $compiler);\n \n \ $language=$PG{$pg} {language2};\n $compiler=\ $PG{$language}{compiler};\n \n if (!&pg_is_i\ nstalled ($pg))\n {\n if ( $OS eq \"windows\"\ ){`perl -M$compiler -e 'install $pg'`;}\n elsif ( \ $ROOT eq \"sudo\"){system (\"sudo perl -M$compiler\ -e 'install $pg'\");}\n else {system (\"su root -\ c perl -M$compiler -e 'install $pg'\");}\n }\\ n return &pg_is_installed ($pg);\n }\n\n\n\nsu\ b install_source_package\n {\n my ($pg)=(@_);\\ n my ($report, $download, $arguments, $language\ , $address, $name, $ext, $main_dir, $distrib);\n \ my $wget_tmp=\"$TMP/wget.tmp\";\n my (@fl);\n\ if ( -e \"$BIN/$pg\" || -e \"$BIN/$pg.exe\"){r\ eturn 1;}\n \n if ($pg eq \"t_coffee\") {re\ turn &install_t_coffee ($pg);}\n elsif ($pg e\ q \"TMalign\"){return &install_TMalign ($pg);}\n\ \n chdir $DISTRIBUTIONS;\n \n $downlo\ ad=$PG{$pg}{source};\n \n if (($download =~/\ tgz/))\n {\n ($address,$name,$ext)=($download\ =~/(.+\\/)([^\\/]+)(\\.tgz)/);\n }\n elsif\ (($download=~/tar\\.gz/))\n {\n ($address,$n\ ame,$ext)=($download=~/(.+\\/)([^\\/]+)(\\.tar\\.g\ z)/);\n }\n elsif (($download=~/tar/))\n \ {\n ($address,$name,$ext)=($download=~/(.+\\/)\ ([^\\/]+)(\\.tar)/);\n }\n else\n {\n\ ($address,$name)=($download=~/(.+\\/)([^\\/]+)/);\ \n $ext=\"\";\n }\n $distrib=\"$name$ext\"\ ;\n \n if ( !-d $pg){mkdir $pg;}\n chdir \ $pg;\n \n #get the distribution if available\\ n if ( -e \"$DOWNLOAD_DIR/$distrib\")\n {\\ n `$CP $DOWNLOAD_DIR/$distrib .`;\n }\n #U\ NTAR and Prepare everything\n if (!-e \"$name.t\ ar\" && !-e \"$name\")\n {\n &check_rm ($wget\ _tmp);\n print \"\\n------- Downloading/Installing\ $pg\\n\";\n if (!-e $distrib && &url2file (\"$dow\ nload\", \"$wget_tmp\")==$EXIT_SUCCESS)\n {\n \ \n `mv $wget_tmp $distrib`;\n `$CP $dist\ rib $DOWNLOAD_DIR/`;\n }\n\n if (!-e $distrib)\n\ {\n print \"!!!!!!! Download of $pg distrib\ ution failed\\n\";\n print \"!!!!!!! Check Add\ ress: $PG{$pg}{source}\\n\";\n return 0;\n }\ \n print \"\\n------- unzipping/untaring $name\\n\\ ";\n if (($ext =~/z/))\n { \n &flush_command\ (\"gunzip $name$ext\");\n \n }\n if (($ext \ =~/tar/) || ($ext =~/tgz/))\n {\n &flush_com\ mand(\"tar -xvf $name.tar\");\n }\n }\n \ #Guess and enter the distribution directory\n @\ fl=ls($p);\n foreach my $f (@fl)\n {\n if \ (-d $f)\n {\n $main_dir=$f;\n }\n }\n\ if (-d $main_dir)\n {chdir $main_dir;}\n \ \n print \"\\n------- Compiling/Installing $pg\\ \n\";\n `make clean $SILENT`;\n #sap\n if\ ($pg eq \"sap\")\n {\n `rm *.o sap sap.exe \ ./util/aa/*.o ./util/wt/.o $SILENT`;\n &flush_com\ mand (\"make $arguments sap\");\n &check_cp ($pg, \ \"$BIN\");\n }\n elsif ($pg eq \"clustalw2\ \")\n {\n &flush_command(\"./configure\");\n \ &flush_command(\"make $arguments\");\n &check_cp (\ \"./src/$pg\", \"$BIN\");\n \n }\n elsif (\ $pg eq \"clustalw\")\n {\n &flush_command(\"m\ ake $arguments clustalw\");\n `$CP $pg $BIN $SILEN\ T`;\n }\n \n elsif ($pg eq \"mafft\")\n\ {\n my $base=cwd();\n my $c;\n \n #compile c\ ore\n mkpath (\"./mafft/bin\");\n mkpath (\"./maff\ t/lib\");\n chdir \"$base/core\";\n `make clean $S\ ILENT`;\n &flush_command (\"make $arguments\");\n \ &flush_command (\"make install LIBDIR=../mafft/lib\ BINDIR=../mafft/bin\");\n \n #compile extension\n\ chdir \"$base/extensions\";\n `make clean $SILENT\ `;\n &flush_command (\"make $arguments\");\n &flus\ h_command (\"make install LIBDIR=../mafft/lib BIND\ IR=../mafft/bin\");\n \n #put everything in mafft \ and copy the coompiled stuff in bin\n chdir \"$bas\ e\";\n if ($ROOT_INSTALL)\n {\n &root_run (\\ "You Must be Roor to Install MAFFT\\n\", \"mkdir /\ usr/local/mafft/;$CP mafft/lib/* /usr/local/mafft;\ $CP mafft/lib/mafft* /usr/local/bin ;$CP mafft/bin\ /mafft /usr/local/bin/; \");\n }\n else\n {\n \ `$CP mafft/lib/* $BIN`;\n `$CP mafft/bin/\ mafft $BIN`;\n }\n `tar -cvf mafft.tar mafft`;\\ n `gzip mafft.tar`;\n `mv mafft.tar.gz $BIN`;\n \ }\n elsif ( $pg eq \"dialign-tx\")\n {\\ n my $f;\n my $base=cwd();\n\n chdir \"./source\";\ \n &flush_command (\" make CPPFLAGS='-O3 -funroll-\ loops' all\");\n \n chdir \"..\";\n &check_cp (\".\ /source/$pg\", \"$BIN\");\n &check_cp (\"./source/\ $pg\", \"$BIN/dialign-t\");\n }\n elsif ($\ pg eq \"poa\")\n {\n &flush_command (\"make $\ arguments poa\");\n &check_cp (\"$pg\", \"$BIN\");\ \n }\n elsif ( $pg eq \"probcons\")\n \ {\n `rm *.exe $SILENT`;\n &flush_command (\"make \ $arguments probcons\");\n &check_cp(\"$pg\", \"$BI\ N/$pg\");\n }\n elsif ( $pg eq \"probcons\\ " || $pg eq \"probconsRNA\")\n {\n `rm *.exe \ $SILENT`;\n &flush_command (\"make $arguments prob\ cons\");\n &check_cp(\"probcons\", \"$BIN/$pg\");\\ n }\n\n elsif ( $pg eq \"muscle\")\n \ {\n `rm *.o muscle muscle.exe $SILENT`;\n &flush_\ command (\"make $arguments all\");\n &check_cp(\"$\ pg\", \"$BIN\");\n }\n elsif ( $pg eq \"pc\ ma\")\n {\n &flush_command (\"make $arguments\ pcma\");\n &check_cp(\"$pg\", \"$BIN\");\n }\ \n elsif ($pg eq \"kalign\")\n {\n &flush_\ command (\"./configure\");\n &flush_command(\"make\ $arguments\");\n &check_cp (\"$pg\",$BIN);\n \ }\n elsif ( $pg eq \"amap\")\n {\n chdir \ \"align\";\n `make clean $SILENT`;\n &flush_comman\ d (\"make $arguments all\");\n &check_cp (\"$pg\",\ $BIN);\n }\n elsif ( $pg eq \"proda\")\n \ {\n &flush_command (\"make $arguments all\");\ \n &check_cp (\"$pg\", $BIN);\n }\n elsif \ ( $pg eq \"prank\")\n {\n &flush_command (\"m\ ake $arguments all\");\n &check_cp (\"$pg\", $BIN)\ ;\n }\n elsif ( $pg eq \"mustang\")\n \ {\n &flush_command (\"make $arguments all\");\n i\ f ( $OS=~/windows/){&check_cp(\"./bin/MUSTANG_v.3\\ ", \"$BIN/mustang.exe\");}\n else {&check_cp(\"./b\ in/MUSTANG_v.3\", \"$BIN/mustang\");}\n }\n \ elsif ( $pg eq \"RNAplfold\")\n {\n &flush_\ command(\"./configure\");\n &flush_command (\"make\ $arguments all\");\n &check_cp(\"./Progs/RNAplfol\ d\", \"$BIN\");\n }\n chdir $CDIR;\n re\ turn &pg_is_installed ($pg, $BIN);\n }\n\nsub ins\ tall_t_coffee\n {\n my ($pg)=(@_);\n my ($r\ eport,$cflags, $arguments, $language, $compiler) ;\ \n #1-Install T-Coffee\n chdir \"t_coffee_so\ urce\";\n &flush_command (\"make clean\");\n \ print \"\\n------- Compiling T-Coffee\\n\";\n \ $language=$PG{$pg} {language2};\n $arguments=$P\ G{$language}{arguments};\n if (!($arguments =~/\ CFLAGS/)){$arguments .= \" CFLAGS=-O2 \";}\n\n \ if ( $CC ne \"\"){&flush_command (\"make -i $argum\ ents t_coffee\");}\n &check_cp ($pg, $BIN);\n \ \n chdir $CDIR;\n return &pg_is_installed \ ($pg, $BIN);\n }\nsub install_TMalign\n {\n m\ y ($pg)=(@_);\n my $report;\n chdir \"t_coff\ ee_source\";\n print \"\\n------- Compiling TMa\ lign\\n\";\n `rm TMalign TMalign.exe $SILENT`;\\ n if ( $FC ne \"\"){&flush_command (\"make -i $\ PG{Fortran}{arguments} TMalign\");}\n &check_cp\ ($pg, $BIN);\n if ( !-e \"$BIN/$pg\" && pg_has\ _binary_distrib ($pg))\n {\n print \"!!!!!!! \ Compilation of $pg impossible. Will try to install\ from binary\\n\";\n return &install_binary_packag\ e ($pg);\n }\n chdir $CDIR;\n return &p\ g_is_installed ($pg, $BIN);\n }\n\nsub pg_has_bin\ ary_distrib\n {\n my ($pg)=(@_);\n if ($PG{\ $pg}{windows}){return 1;}\n elsif ($PG{$pg}{osx\ }){return 1;}\n elsif ($PG{$pg}{linux}){return \ 1;}\n return 0;\n }\nsub install_binary_packag\ e\n {\n my ($pg)=(@_);\n my ($base,$report,\ $name, $download, $arguments, $language, $dir);\n \ my $isdir;\n &input_os();\n \n if (!&s\ upported_os($OS)){return 0;}\n if ( $PG{$pg}{bi\ nary}){$name=$PG{$pg}{binary};}\n else \n \ {\n $name=$pg;\n if ( $OS eq \"windows\"){$name.=\\ ".exe\";}\n }\n \n $download=\"$WEB_BAS\ E/Packages/Binaries/$OS/$name\";\n \n $base=\ cwd();\n chdir $TMP;\n \n if (!-e $name)\\ n {\n `rm x $SILENT`;\n if ( url2file(\"$down\ load\",\"x\")==$EXIT_SUCCESS)\n {\n `mv x $n\ ame`;\n }\n }\n \n if (!-e $name)\n \ {\n print \"!!!!!!! $PG{$pg}{dname}: Download \ of $pg binary failed\\n\";\n print \"!!!!!!! $PG{$\ pg}{dname}: Check Address: $download\\n\";\n retur\ n 0;\n }\n print \"\\n------- Installing $\ pg\\n\";\n \n if ($name =~/tar\\.gz/)\n \ {\n `gunzip $name`;\n `tar -xvf $pg.tar`;\n chdi\ r $pg;\n if ( $pg eq \"mafft\")\n {\n if ($R\ OOT_INSTALL)\n {\n &root_run (\"You Must be\ Roor to Install MAFFT\\n\", \"$CP mafft/bin/* /us\ r/local/mafft;mkdir /usr/local/mafft/; $CP mafft/l\ ib/* /usr/local/bin/\");\n }\n else\n \ {\n `$CP $TMP/$pg/bin/* $BIN $SILENT`;\n `$C\ P $TMP/$pg/lib/* $BIN $SILENT`;\n }\n }\n \ else\n {\n if (-e \"$TMP/$pg/data\"){`$CP $T\ MP/$pg/data/* $TCM $SILENT`;}\n if (!($pg=~/\\\ */)){`rm -rf $pg`;}\n }\n }\n else\n \ {\n &check_cp (\"$pg\", \"$BIN\");\n `chmod u+x \ $BIN/$pg`; \n unlink ($pg);\n }\n chdir $b\ ase;\n $PG{$pg}{from_binary}=1;\n return &pg\ _is_installed ($pg, $BIN);\n }\n\nsub add_dir \n \ {\n my $dir=@_[0];\n \n if (!-e $dir && \ !-d $dir)\n {\n return mkpath ($dir);\n \ }\n else\n {\n return 0;\n }\n }\nsu\ b check_rm \n {\n my ($file)=(@_);\n \n \ if ( -e $file)\n {\n return unlink($file);\n \ }\n return 0;\n }\nsub check_cp\n {\n \ my ($from, $to)=(@_);\n if ( !-e $from && -e \\ "$from\\.exe\"){$from=\"$from\\.exe\";}\n if ( \ !-e $from){return 0;}\n \n `$CP $from $t\ o`;\n return 1;\n }\nsub check_file_list_exist\ s \n {\n my ($base, @flist)=(@_);\n my $f;\\ n\n foreach $f (@flist)\n {\n if ( !-e \"$\ base/$f\"){return 0;}\n }\n return 1;\n }\ \nsub ls\n {\n my $f=@_[0];\n my @fl;\n \ chomp(@fl=`ls -1 $f`);\n return @fl;\n }\nsub \ flush_command\n {\n my $command=@_[0];\n my\ $F=new FileHandle;\n open ($F, \"$command|\");\ \n while (<$F>){print \" --- $_\";}\n clo\ se ($F);\n } \n\nsub input_installation_direct\ ory\n {\n my $dir=@_[0];\n my $new;\n \n\ print \"------- The current installation direc\ tory is: [$dir]\\n\";\n print \"??????? Return \ to keep the default or new value:\";\n \n if \ ($NO_QUESTION==0)\n {\n chomp ($new=);\ \n while ( $new ne \"\" && !input_yes (\"You have \ entered $new. Is this correct? ([y]/n):\"))\n {\\ n print \"???????New installation directory:\"\ ;\n chomp ($new=);\n }\n $dir=($new e\ q \"\")?$dir:$new;\n $dir=~s/\\/$//;\n }\n \ \n if ( -d $dir){return $dir;}\n elsif (&ro\ ot_run (\"You must be root to create $dir\",\"mkdi\ r $dir\")==$EXIT_SUCCESS){return $dir;}\n else\\ n {\n print \"!!!!!!! $dir could not be creat\ ed\\n\";\n if ( $NO_QUESTION)\n {\n return \\ "\";\n }\n elsif ( &input_yes (\"??????? Do you \ want to provide a new directory([y]/n)?:\"))\n {\ \n return input_installation_directory ($dir);\ \n }\n else\n {\n return \"\";\n }\n \ }\n \n }\nsub input_yes\n {\n my $questi\ on =@_[0];\n my $answer;\n\n if ($NO_QUESTIO\ N==1){return 1;}\n \n if ($question eq \"\")\ {$question=\"??????? Do you wish to proceed ([y]/n\ )?:\";}\n print $question;\n chomp($answer=l\ c());\n if (($answer=~/^y/) || $answer e\ q \"\"){return 1;}\n elsif ( ($answer=~/^n/)){r\ eturn 0;}\n else\n {\n return input_yes($q\ uestion);\n }\n }\nsub root_run\n {\n my\ ($txt, $cmd)=(@_);\n \n if ( system ($cmd)=\ =$EXIT_SUCCESS){return $EXIT_SUCCESS;}\n else \\ n {\n print \"------- $txt\\n\";\n if ( $ROOT\ eq \"sudo\"){return system (\"sudo $cmd\");}\n el\ se {return system (\"su root -c \\\"$cmd\\\"\");}\\ n }\n }\nsub get_root\n {\n if (&pg_is_i\ nstalled (\"sudo\")){return \"sudo\";}\n else {\ return \"su\";}\n }\n\nsub get_os\n {\n my $r\ aw_os=`uname`;\n my $os;\n\n $raw_os=lc ($ra\ w_os);\n \n if ($raw_os =~/cygwin/){$os=\"wi\ ndows\";}\n elsif ($raw_os =~/linux/){$os=\"lin\ ux\";}\n elsif ($raw_os =~/osx/){$os=\"macosx\"\ ;}\n elsif ($raw_os =~/darwin/){$os=\"macosx\";\ }\n else\n {\n $os=$raw_os;\n }\n \ return $os;\n }\nsub input_os\n {\n my $answe\ r;\n if ($OS) {return $OS;}\n \n print \"\ ??????? which os do you use: [w]indows, [l]inux, [\ m]acosx:?\";\n $answer=lc();\n\n if (\ ($answer=~/^m/)){$OS=\"macosx\";}\n elsif ( ($a\ nswer=~/^w/)){$OS=\"windows\";}\n elsif ( ($ans\ wer=~/^linux/)){$OS=\"linux\";}\n \n else\n \ {\n return &input_os();\n }\n return \ $OS;\n }\n\nsub supported_os\n {\n my ($os)=(\ @_[0]);\n return $SUPPORTED_OS{$os};\n }\n \ \n \n\n\nsub update_tclinkdb \n {\n my $fil\ e =@_[0];\n my $name;\n my $F=new FileHandle\ ;\n my ($download, $address, $name, $l, $db);\n\ \n if ( $file eq \"update\"){$file=$TCLINKD\ B_ADDRESS;}\n \n if ( $file =~/http:\\/\\// \ || $file =~/ftp:\\/\\//)\n {\n ($address, $na\ me)=($download=~/(.*)\\/([^\\/]+)$/);\n `rm x $SIL\ ENT`;\n if (&url2file ($file,\"x\")==$EXIT_SUCCESS\ )\n {\n print \"------- Susscessful upload o\ f $name\";\n `mv x $name`;\n $file=$name;\\ n }\n }\n open ($F, \"$file\");\n whi\ le (<$F>)\n {\n my $l=$_;\n if (($l =~/^\\/\\\ //) || ($db=~/^#/)){;}\n elsif ( !($l =~/\\w/)){;}\ \n else\n {\n my @v=split (/\\s+/, $l);\n \ if ( $l=~/^MODE/)\n {\n $MODE{$v[1]}{$v[2\ ]}=$v[3];\n }\n elsif ($l=~/^PG/)\n \ {\n $PG{$v[1]}{$v[2]}=$v[3];\n }\n }\n \ }\n close ($F);\n &post_process_PG();\n\ return;\n }\n\n\n\nsub initialize_PG\n {\n \ \n$PG{\"t_coffee\"}{\"4_TCOFFEE\"}=\"TCOFFEE\";\\ n$PG{\"t_coffee\"}{\"type\"}=\"sequence_multiple_a\ ligner\";\n$PG{\"t_coffee\"}{\"ADDRESS\"}=\"http:/\ /www.tcoffee.org\";\n$PG{\"t_coffee\"}{\"language\\ "}=\"C\";\n$PG{\"t_coffee\"}{\"language2\"}=\"C\";\ \n$PG{\"t_coffee\"}{\"source\"}=\"http://www.tcoff\ ee.org/Packages/T-COFFEE_distribution.tar.gz\";\n$\ PG{\"t_coffee\"}{\"update_action\"}=\"always\";\n$\ PG{\"t_coffee\"}{\"mode\"}=\"tcoffee,mcoffee,rcoff\ ee,expresso,3dcoffee\";\n$PG{\"clustalw2\"}{\"4_TC\ OFFEE\"}=\"CLUSTALW2\";\n$PG{\"clustalw2\"}{\"type\ \"}=\"sequence_multiple_aligner\";\n$PG{\"clustalw\ 2\"}{\"ADDRESS\"}=\"http://www.clustal.org\";\n$PG\ {\"clustalw2\"}{\"language\"}=\"C++\";\n$PG{\"clus\ talw2\"}{\"language2\"}=\"CXX\";\n$PG{\"clustalw2\\ "}{\"source\"}=\"http://www.clustal.org/download/2\ .0.10/clustalw-2.0.10-src.tar.gz\";\n$PG{\"clustal\ w2\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"clusta\ lw\"}{\"4_TCOFFEE\"}=\"CLUSTALW\";\n$PG{\"clustalw\ \"}{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\ \"clustalw\"}{\"ADDRESS\"}=\"http://www.clustal.or\ g\";\n$PG{\"clustalw\"}{\"language\"}=\"C\";\n$PG{\ \"clustalw\"}{\"language2\"}=\"C\";\n$PG{\"clustal\ w\"}{\"source\"}=\"http://www.clustal.org/download\ /1.X/ftp-igbmc.u-strasbg.fr/pub/ClustalW/clustalw1\ .82.UNIX.tar.gz\";\n$PG{\"clustalw\"}{\"mode\"}=\"\ mcoffee,rcoffee\";\n$PG{\"dialign-t\"}{\"4_TCOFFEE\ \"}=\"DIALIGNT\";\n$PG{\"dialign-t\"}{\"type\"}=\"\ sequence_multiple_aligner\";\n$PG{\"dialign-t\"}{\\ "ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\ {\"dialign-t\"}{\"DIR\"}=\"/usr/share/dialign-tx/\\ ";\n$PG{\"dialign-t\"}{\"language\"}=\"C\";\n$PG{\\ "dialign-t\"}{\"language2\"}=\"C\";\n$PG{\"dialign\ -t\"}{\"source\"}=\"http://dialign-tx.gobics.de/DI\ ALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-t\"}{\"mod\ e\"}=\"mcoffee\";\n$PG{\"dialign-t\"}{\"binary\"}=\ \"dialign-t\";\n$PG{\"dialign-tx\"}{\"4_TCOFFEE\"}\ =\"DIALIGNTX\";\n$PG{\"dialign-tx\"}{\"type\"}=\"s\ equence_multiple_aligner\";\n$PG{\"dialign-tx\"}{\\ "ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\ {\"dialign-tx\"}{\"DIR\"}=\"/usr/share/dialign-tx/\ \";\n$PG{\"dialign-tx\"}{\"language\"}=\"C\";\n$PG\ {\"dialign-tx\"}{\"language2\"}=\"C\";\n$PG{\"dial\ ign-tx\"}{\"source\"}=\"http://dialign-tx.gobics.d\ e/DIALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-tx\"}{\ \"mode\"}=\"mcoffee\";\n$PG{\"dialign-tx\"}{\"bina\ ry\"}=\"dialign-tx\";\n$PG{\"poa\"}{\"4_TCOFFEE\"}\ =\"POA\";\n$PG{\"poa\"}{\"type\"}=\"sequence_multi\ ple_aligner\";\n$PG{\"poa\"}{\"ADDRESS\"}=\"http:/\ /www.bioinformatics.ucla.edu/poa/\";\n$PG{\"poa\"}\ {\"language\"}=\"C\";\n$PG{\"poa\"}{\"language2\"}\ =\"C\";\n$PG{\"poa\"}{\"source\"}=\"http://downloa\ ds.sourceforge.net/poamsa/poaV2.tar.gz\";\n$PG{\"p\ oa\"}{\"DIR\"}=\"/usr/share/\";\n$PG{\"poa\"}{\"FI\ LE1\"}=\"blosum80.mat\";\n$PG{\"poa\"}{\"mode\"}=\\ "mcoffee\";\n$PG{\"poa\"}{\"binary\"}=\"poa\";\n$P\ G{\"probcons\"}{\"4_TCOFFEE\"}=\"PROBCONS\";\n$PG{\ \"probcons\"}{\"type\"}=\"sequence_multiple_aligne\ r\";\n$PG{\"probcons\"}{\"ADDRESS\"}=\"http://prob\ cons.stanford.edu/\";\n$PG{\"probcons\"}{\"languag\ e2\"}=\"CXX\";\n$PG{\"probcons\"}{\"language\"}=\"\ C++\";\n$PG{\"probcons\"}{\"source\"}=\"http://pro\ bcons.stanford.edu/probcons_v1_12.tar.gz\";\n$PG{\\ "probcons\"}{\"mode\"}=\"mcoffee\";\n$PG{\"probcon\ s\"}{\"binary\"}=\"probcons\";\n$PG{\"mafft\"}{\"4\ _TCOFFEE\"}=\"MAFFT\";\n$PG{\"mafft\"}{\"type\"}=\\ "sequence_multiple_aligner\";\n$PG{\"mafft\"}{\"AD\ DRESS\"}=\"http://align.bmr.kyushu-u.ac.jp/mafft/o\ nline/server/\";\n$PG{\"mafft\"}{\"language\"}=\"C\ \";\n$PG{\"mafft\"}{\"language\"}=\"C\";\n$PG{\"ma\ fft\"}{\"source\"}=\"http://align.bmr.kyushu-u.ac.\ jp/mafft/software/mafft-6.603-with-extensions-src.\ tgz\";\n$PG{\"mafft\"}{\"windows\"}=\"http://align\ .bmr.kyushu-u.ac.jp/mafft/software/mafft-6.603-min\ gw.tar\";\n$PG{\"mafft\"}{\"mode\"}=\"mcoffee,rcof\ fee\";\n$PG{\"mafft\"}{\"binary\"}=\"mafft.tar.gz\\ ";\n$PG{\"muscle\"}{\"4_TCOFFEE\"}=\"MUSCLE\";\n$P\ G{\"muscle\"}{\"type\"}=\"sequence_multiple_aligne\ r\";\n$PG{\"muscle\"}{\"ADDRESS\"}=\"http://www.dr\ ive5.com/muscle/\";\n$PG{\"muscle\"}{\"language\"}\ =\"C++\";\n$PG{\"muscle\"}{\"language2\"}=\"GPP\";\ \n$PG{\"muscle\"}{\"source\"}=\"http://www.drive5.\ com/muscle/downloads3.6/muscle3.6_src.tar.gz\";\n$\ PG{\"muscle\"}{\"windows\"}=\"http://www.drive5.co\ m/muscle/downloads3.6/muscle3.6_win32.zip\";\n$PG{\ \"muscle\"}{\"linux\"}=\"http://www.drive5.com/mus\ cle/downloads3.6/muscle3.6_linux_ia32.tar.gz\";\n$\ PG{\"muscle\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG\ {\"pcma\"}{\"4_TCOFFEE\"}=\"PCMA\";\n$PG{\"pcma\"}\ {\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"p\ cma\"}{\"ADDRESS\"}=\"ftp://iole.swmed.edu/pub/PCM\ A/\";\n$PG{\"pcma\"}{\"language\"}=\"C\";\n$PG{\"p\ cma\"}{\"language2\"}=\"C\";\n$PG{\"pcma\"}{\"sour\ ce\"}=\"ftp://iole.swmed.edu/pub/PCMA/pcma.tar.gz\\ ";\n$PG{\"pcma\"}{\"mode\"}=\"mcoffee\";\n$PG{\"ka\ lign\"}{\"4_TCOFFEE\"}=\"KALIGN\";\n$PG{\"kalign\"\ }{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"\ kalign\"}{\"ADDRESS\"}=\"http://msa.cgb.ki.se\";\n\ $PG{\"kalign\"}{\"language\"}=\"C\";\n$PG{\"kalign\ \"}{\"language2\"}=\"C\";\n$PG{\"kalign\"}{\"sourc\ e\"}=\"http://msa.cgb.ki.se/downloads/kalign/curre\ nt.tar.gz\";\n$PG{\"kalign\"}{\"mode\"}=\"mcoffee\\ ";\n$PG{\"amap\"}{\"4_TCOFFEE\"}=\"AMAP\";\n$PG{\"\ amap\"}{\"type\"}=\"sequence_multiple_aligner\";\n\ $PG{\"amap\"}{\"ADDRESS\"}=\"http://bio.math.berke\ ley.edu/amap/\";\n$PG{\"amap\"}{\"language\"}=\"C+\ +\";\n$PG{\"amap\"}{\"language2\"}=\"CXX\";\n$PG{\\ "amap\"}{\"source\"}=\"http://baboon.math.berkeley\ .edu/amap/download/amap.2.2.tar.gz\";\n$PG{\"amap\\ "}{\"mode\"}=\"mcoffee\";\n$PG{\"proda\"}{\"4_TCOF\ FEE\"}=\"PRODA\";\n$PG{\"proda\"}{\"type\"}=\"sequ\ ence_multiple_aligner\";\n$PG{\"proda\"}{\"ADDRESS\ \"}=\"http://proda.stanford.edu\";\n$PG{\"proda\"}\ {\"language\"}=\"C++\";\n$PG{\"proda\"}{\"language\ 2\"}=\"CXX\";\n$PG{\"proda\"}{\"source\"}=\"http:/\ /proda.stanford.edu/proda_1_0.tar.gz\";\n$PG{\"pro\ da\"}{\"mode\"}=\"mcoffee\";\n$PG{\"prank\"}{\"4_T\ COFFEE\"}=\"PRANK\";\n$PG{\"prank\"}{\"type\"}=\"s\ equence_multiple_aligner\";\n$PG{\"prank\"}{\"ADDR\ ESS\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\"\ ;\n$PG{\"prank\"}{\"language\"}=\"C++\";\n$PG{\"pr\ ank\"}{\"language2\"}=\"CXX\";\n$PG{\"prank\"}{\"s\ ource\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\ src/old/prank.src.081202.tgz\";\n$PG{\"prank\"}{\"\ mode\"}=\"mcoffee\";\n$PG{\"sap\"}{\"4_TCOFFEE\"}=\ \"SAP\";\n$PG{\"sap\"}{\"type\"}=\"structure_pairw\ ise_aligner\";\n$PG{\"sap\"}{\"ADDRESS\"}=\"http:/\ /mathbio.nimr.mrc.ac.uk/wiki/Software\";\n$PG{\"sa\ p\"}{\"language\"}=\"C\";\n$PG{\"sap\"}{\"language\ 2\"}=\"C\";\n$PG{\"sap\"}{\"source\"}=\"http://www\ .tcoffee.org/Packages/sap_distribution_TCC_0.6.tar\ .gz\";\n$PG{\"sap\"}{\"mode\"}=\"expresso,3dcoffee\ \";\n$PG{\"TMalign\"}{\"4_TCOFFEE\"}=\"TMALIGN\";\\ n$PG{\"TMalign\"}{\"type\"}=\"structure_pairwise_a\ ligner\";\n$PG{\"TMalign\"}{\"ADDRESS\"}=\"http://\ zhang.bioinformatics.ku.edu/TM-align/TMalign.f\";\\ n$PG{\"TMalign\"}{\"language\"}=\"Fortran\";\n$PG{\ \"TMalign\"}{\"language2\"}=\"Fortran\";\n$PG{\"TM\ align\"}{\"source\"}=\"http://zhang.bioinformatics\ .ku.edu/TM-align/TMalign.f\";\n$PG{\"TMalign\"}{\"\ linux\"}=\"http://zhang.bioinformatics.ku.edu/TM-a\ lign/TMalign_32.gz\";\n$PG{\"TMalign\"}{\"mode\"}=\ \"expresso,3dcoffee\";\n$PG{\"mustang\"}{\"4_TCOFF\ EE\"}=\"MUSTANG\";\n$PG{\"mustang\"}{\"type\"}=\"s\ tructure_pairwise_aligner\";\n$PG{\"mustang\"}{\"A\ DDRESS\"}=\"http://www.cs.mu.oz.au/~arun/mustang\"\ ;\n$PG{\"mustang\"}{\"language\"}=\"C++\";\n$PG{\"\ mustang\"}{\"language2\"}=\"CXX\";\n$PG{\"mustang\\ "}{\"source\"}=\"http://www.cs.mu.oz.au/~arun/must\ ang/mustang_v.3.tgz\";\n$PG{\"mustang\"}{\"mode\"}\ =\"expresso,3dcoffee\";\n$PG{\"lsqman\"}{\"4_TCOFF\ EE\"}=\"LSQMAN\";\n$PG{\"lsqman\"}{\"type\"}=\"str\ ucture_pairwise_aligner\";\n$PG{\"lsqman\"}{\"ADDR\ ESS\"}=\"empty\";\n$PG{\"lsqman\"}{\"language\"}=\\ "empty\";\n$PG{\"lsqman\"}{\"language2\"}=\"empty\\ ";\n$PG{\"lsqman\"}{\"source\"}=\"empty\";\n$PG{\"\ lsqman\"}{\"update_action\"}=\"never\";\n$PG{\"lsq\ man\"}{\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"ali\ gn_pdb\"}{\"4_TCOFFEE\"}=\"ALIGN_PDB\";\n$PG{\"ali\ gn_pdb\"}{\"type\"}=\"structure_pairwise_aligner\"\ ;\n$PG{\"align_pdb\"}{\"ADDRESS\"}=\"empty\";\n$PG\ {\"align_pdb\"}{\"language\"}=\"empty\";\n$PG{\"al\ ign_pdb\"}{\"language2\"}=\"empty\";\n$PG{\"align_\ pdb\"}{\"source\"}=\"empty\";\n$PG{\"align_pdb\"}{\ \"update_action\"}=\"never\";\n$PG{\"align_pdb\"}{\ \"mode\"}=\"expresso,3dcoffee\";\n$PG{\"fugueali\"\ }{\"4_TCOFFEE\"}=\"FUGUE\";\n$PG{\"fugueali\"}{\"t\ ype\"}=\"structure_pairwise_aligner\";\n$PG{\"fugu\ eali\"}{\"ADDRESS\"}=\"http://www-cryst.bioc.cam.a\ c.uk/fugue/download.html\";\n$PG{\"fugueali\"}{\"l\ anguage\"}=\"empty\";\n$PG{\"fugueali\"}{\"languag\ e2\"}=\"empty\";\n$PG{\"fugueali\"}{\"source\"}=\"\ empty\";\n$PG{\"fugueali\"}{\"update_action\"}=\"n\ ever\";\n$PG{\"fugueali\"}{\"mode\"}=\"expresso,3d\ coffee\";\n$PG{\"dalilite.pl\"}{\"4_TCOFFEE\"}=\"D\ ALILITEc\";\n$PG{\"dalilite.pl\"}{\"type\"}=\"stru\ cture_pairwise_aligner\";\n$PG{\"dalilite.pl\"}{\"\ ADDRESS\"}=\"built_in\";\n$PG{\"dalilite.pl\"}{\"A\ DDRESS2\"}=\"http://www.ebi.ac.uk/Tools/webservice\ s/services/dalilite\";\n$PG{\"dalilite.pl\"}{\"lan\ guage\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"languag\ e2\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"source\"}=\ \"empty\";\n$PG{\"dalilite.pl\"}{\"update_action\"\ }=\"never\";\n$PG{\"dalilite.pl\"}{\"mode\"}=\"exp\ resso,3dcoffee\";\n$PG{\"probconsRNA\"}{\"4_TCOFFE\ E\"}=\"PROBCONSRNA\";\n$PG{\"probconsRNA\"}{\"type\ \"}=\"RNA_multiple_aligner\";\n$PG{\"probconsRNA\"\ }{\"ADDRESS\"}=\"http://probcons.stanford.edu/\";\\ n$PG{\"probconsRNA\"}{\"language\"}=\"C++\";\n$PG{\ \"probconsRNA\"}{\"language2\"}=\"CXX\";\n$PG{\"pr\ obconsRNA\"}{\"source\"}=\"http://probcons.stanfor\ d.edu/probconsRNA.tar.gz\";\n$PG{\"probconsRNA\"}{\ \"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"sfold\"}{\"4\ _TCOFFEE\"}=\"CONSAN\";\n$PG{\"sfold\"}{\"type\"}=\ \"RNA_pairwise_aligner\";\n$PG{\"sfold\"}{\"ADDRES\ S\"}=\"http://selab.janelia.org/software/consan/\"\ ;\n$PG{\"sfold\"}{\"language\"}=\"empty\";\n$PG{\"\ sfold\"}{\"language2\"}=\"empty\";\n$PG{\"sfold\"}\ {\"source\"}=\"empty\";\n$PG{\"sfold\"}{\"update_a\ ction\"}=\"never\";\n$PG{\"sfold\"}{\"mode\"}=\"rc\ offee\";\n$PG{\"RNAplfold\"}{\"4_TCOFFEE\"}=\"RNAP\ LFOLD\";\n$PG{\"RNAplfold\"}{\"type\"}=\"RNA_secon\ darystructure_predictor\";\n$PG{\"RNAplfold\"}{\"A\ DDRESS\"}=\"http://www.tbi.univie.ac.at/~ivo/RNA/\\ ";\n$PG{\"RNAplfold\"}{\"language\"}=\"C\";\n$PG{\\ "RNAplfold\"}{\"language2\"}=\"C\";\n$PG{\"RNAplfo\ ld\"}{\"source\"}=\"http://www.tbi.univie.ac.at/~i\ vo/RNA/ViennaRNA-1.7.2.tar.gz\";\n$PG{\"RNAplfold\\ "}{\"mode\"}=\"rcoffee\";\n$PG{\"hmmtop\"}{\"4_TCO\ FFEE\"}=\"HMMTOP\";\n$PG{\"hmmtop\"}{\"type\"}=\"p\ rotein_secondarystructure_predictor\";\n$PG{\"hmmt\ op\"}{\"ADDRESS\"}=\"www.enzim.hu/hmmtop/\";\n$PG{\ \"hmmtop\"}{\"language\"}=\"C\";\n$PG{\"hmmtop\"}{\ \"language2\"}=\"C\";\n$PG{\"hmmtop\"}{\"source\"}\ =\"empty\";\n$PG{\"hmmtop\"}{\"update_action\"}=\"\ never\";\n$PG{\"hmmtop\"}{\"mode\"}=\"tcoffee\";\n\ $PG{\"gorIV\"}{\"4_TCOFFEE\"}=\"GOR4\";\n$PG{\"gor\ IV\"}{\"type\"}=\"protein_secondarystructure_predi\ ctor\";\n$PG{\"gorIV\"}{\"ADDRESS\"}=\"http://mig.\ jouy.inra.fr/logiciels/gorIV/\";\n$PG{\"gorIV\"}{\\ "language\"}=\"C\";\n$PG{\"gorIV\"}{\"language2\"}\ =\"C\";\n$PG{\"gorIV\"}{\"source\"}=\"http://mig.j\ ouy.inra.fr/logiciels/gorIV/GOR_IV.tar.gz\";\n$PG{\ \"gorIV\"}{\"update_action\"}=\"never\";\n$PG{\"go\ rIV\"}{\"mode\"}=\"tcoffee\";\n$PG{\"wublast.pl\"}\ {\"4_TCOFFEE\"}=\"EBIWUBLASTc\";\n$PG{\"wublast.pl\ \"}{\"type\"}=\"protein_homology_predictor\";\n$PG\ {\"wublast.pl\"}{\"ADDRESS\"}=\"built_in\";\n$PG{\\ "wublast.pl\"}{\"ADDRESS2\"}=\"http://www.ebi.ac.u\ k/Tools/webservices/services/wublast\";\n$PG{\"wub\ last.pl\"}{\"language\"}=\"Perl\";\n$PG{\"wublast.\ pl\"}{\"language2\"}=\"Perl\";\n$PG{\"wublast.pl\"\ }{\"source\"}=\"empty\";\n$PG{\"wublast.pl\"}{\"up\ date_action\"}=\"never\";\n$PG{\"wublast.pl\"}{\"m\ ode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"bla\ stpgp.pl\"}{\"4_TCOFFEE\"}=\"EBIBLASTPGPc\";\n$PG{\ \"blastpgp.pl\"}{\"type\"}=\"protein_homology_pred\ ictor\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS\"}=\"buil\ t_in\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS2\"}=\"http\ ://www.ebi.ac.uk/Tools/webservices/services/blastp\ gp\";\n$PG{\"blastpgp.pl\"}{\"language\"}=\"Perl\"\ ;\n$PG{\"blastpgp.pl\"}{\"language2\"}=\"Perl\";\n\ $PG{\"blastpgp.pl\"}{\"source\"}=\"empty\";\n$PG{\\ "blastpgp.pl\"}{\"update_action\"}=\"never\";\n$PG\ {\"blastpgp.pl\"}{\"mode\"}=\"psicoffee,expresso,3\ dcoffee\";\n$PG{\"blastcl3\"}{\"4_TCOFFEE\"}=\"NCB\ IWEBBLAST\";\n$PG{\"blastcl3\"}{\"type\"}=\"protei\ n_homology_predictor\";\n$PG{\"blastcl3\"}{\"ADDRE\ SS\"}=\"ftp://ftp.ncbi.nih.gov/blast/executables/L\ ATEST\";\n$PG{\"blastcl3\"}{\"language\"}=\"C\";\n\ $PG{\"blastcl3\"}{\"language2\"}=\"C\";\n$PG{\"bla\ stcl3\"}{\"source\"}=\"empty\";\n$PG{\"blastcl3\"}\ {\"update_action\"}=\"never\";\n$PG{\"blastcl3\"}{\ \"mode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"\ blastpgp\"}{\"4_TCOFFEE\"}=\"NCBIBLAST\";\n$PG{\"b\ lastpgp\"}{\"type\"}=\"protein_homology_predictor\\ ";\n$PG{\"blastpgp\"}{\"ADDRESS\"}=\"ftp://ftp.ncb\ i.nih.gov/blast/executables/LATEST\";\n$PG{\"blast\ pgp\"}{\"language\"}=\"C\";\n$PG{\"blastpgp\"}{\"l\ anguage2\"}=\"C\";\n$PG{\"blastpgp\"}{\"source\"}=\ \"empty\";\n$PG{\"blastpgp\"}{\"update_action\"}=\\ "never\";\n$PG{\"blastpgp\"}{\"mode\"}=\"psicoffee\ ,expresso,3dcoffee\";\n$PG{\"SOAP::Lite\"}{\"4_TCO\ FFEE\"}=\"SOAPLITE\";\n$PG{\"SOAP::Lite\"}{\"type\\ "}=\"library\";\n$PG{\"SOAP::Lite\"}{\"ADDRESS\"}=\ \"http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite\ -0.710.08/Makefile.PL\";\n$PG{\"SOAP::Lite\"}{\"la\ nguage\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"languag\ e2\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"source\"}=\\ "empty\";\n$PG{\"SOAP::Lite\"}{\"mode\"}=\"psicoff\ ee,expresso,3dcoffee\";\n$MODE{\"tcoffee\"}{\"name\ \"}=\"tcoffee\";\n$MODE{\"rcoffee\"}{\"name\"}=\"r\ coffee\";\n$MODE{\"3dcoffee\"}{\"name\"}=\"3dcoffe\ e\";\n$MODE{\"mcoffee\"}{\"name\"}=\"mcoffee\";\n$\ MODE{\"expresso\"}{\"name\"}=\"expresso\";\n\n\n$P\ G{C}{compiler}=\"gcc\";\n$PG{C}{compiler_flag}=\"C\ C\";\n$PG{C}{options}=\"\";\n$PG{C}{options_flag}=\ \"CFLAGS\";\n$PG{C}{type}=\"compiler\";\n\n$PG{\"C\ XX\"}{compiler}=\"g++\";\n$PG{\"CXX\"}{compiler_fl\ ag}=\"CXX\";\n$PG{\"CXX\"}{options}=\"\";\n$PG{\"C\ XX\"}{options_flag}=\"CXXFLAGS\";\n$PG{CXX}{type}=\ \"compiler\";\n\n$PG{\"CPP\"}{compiler}=\"g++\";\n\ $PG{\"CPP\"}{compiler_flag}=\"CPP\";\n$PG{\"CPP\"}\ {options}=\"\";\n$PG{\"CPP\"}{options_flag}=\"CPPF\ LAGS\";\n$PG{CPP}{type}=\"compiler\";\n\n$PG{\"GPP\ \"}{compiler}=\"g++\";\n$PG{\"GPP\"}{compiler_flag\ }=\"GPP\";\n$PG{\"GPP\"}{options}=\"\";\n$PG{\"GPP\ \"}{options_flag}=\"CFLAGS\";\n$PG{GPP}{type}=\"co\ mpiler\";\n\n$PG{Fortran}{compiler}=\"g77\";\n$PG{\ Fortran}{compiler_flag}=\"FCC\";\n$PG{Fortran}{typ\ e}=\"compiler\";\n\n$PG{Perl}{compiler}=\"CPAN\";\\ n$PG{Perl}{type}=\"compiler\";\n\n$SUPPORTED_OS{ma\ cox}=\"Macintosh\";\n$SUPPORTED_OS{linux}=\"Linux\\ ";\n$SUPPORTED_OS{windows}=\"Cygwin\";\n\n\n\n$MOD\ E{t_coffee}{description}=\" for regular multiple s\ equence alignments\";\n$MODE{rcoffee} {description\ }=\" for RNA multiple sequence alignments\";\n\n$M\ ODE{psicoffee} {description}=\" for Homology Exten\ ded multiple sequence alignments\";\n$MODE{express\ o}{description}=\" for very accurate structure bas\ ed multiple sequence alignments\";\n$MODE{\"3dcoff\ ee\"}{description}=\" for multiple structure align\ ments\";\n$MODE{mcoffee} {description}=\" for comb\ ining alternative multiple sequence alignment pack\ ages\\n------- into a unique meta-package. The ins\ taller will upload several MSA packages and compil\ e them\\n\n\";\n\n\n&post_process_PG();\nreturn;\n\ }\n\nsub post_process_PG\n {\n my $p;\n \n \ %PG=&name2dname (%PG);\n %MODE=&name2dname(%\ MODE);\n foreach $p (keys(%PG)){if ( $PG{$p}{ty\ pe} eq \"compiler\"){$PG{$p}{update_action}=\"neve\ r\";}}\n \n }\n\nsub name2dname\n {\n my (\ %L)=(@_);\n my ($l, $ml);\n \n foreach my\ $pg (keys(%L))\n {\n $l=length ($pg);\n if (\ $l>$ml){$ml=$l;}\n }\n $ml+=1;\n forea\ ch my $pg (keys(%L))\n {\n my $name;\n $l=$ml\ -length ($pg);\n $name=$pg;\n for ( $b=0; $b<$l; $\ b++)\n {\n $name .=\" \";\n }\n $L{$pg}{dn\ ame}=$name;\n }\n return %L;\n }\n\nsub e\ nv_file2putenv\n {\n my $f=@_[0];\n my $F=n\ ew FileHandle;\n my $n;\n \n open ($F, \"\ $f\");\n while (<$F>)\n {\n my $line=$_;\n\ my($var, $value)=($_=~/(\\S+)\\=(\\S*)/);\n $ENV{\ $var}=$value;\n $ENV_SET{$var}=1;\n $n++;\n }\ \n close ($F);\n return $n;\n }\n\n","use E\ nv;\nuse Cwd;\n@suffix=(\"tmp\", \"temp\", \"cache\ \", \"t_coffee\", \"core\", \"tcoffee\");\n\nif ($\ #ARGV==-1)\n {\n print \"clean_cache.pl -file \ -dir= -size=\\n0: unlimited -1 always.\\nWill only clean dir\ ectories matching:[\";\n foreach $k(@suffix){pr\ int \"*$k* \";}\n print \"]\\n\";\n exit (EX\ IT_FAILURE);\n }\n\n$cl=join (\" \",@ARGV);\nif (\ ($cl=~/\\-no_action/))\n {\n exit (EXIT_SUCCES\ S);\n }\n\nif (($cl=~/\\-debug/))\n {\n $DEBU\ G=1;\n }\nelse\n {\n $DEBUG=0;\n }\n\nif (($\ cl=~/\\-dir=(\\S+)/))\n {\n $dir=$1;\n }\nels\ e\n {\n $dir=\"./\";\n }\n\nif ($cl=~/\\-file\ =(\\S+)/)\n {\n $file=$1;\n }\nelse\n {\n \ $file=0;\n }\n\nif ($cl=~/\\-size=(\\S+)/)\n {\\ n $max_size=$1;\n }\nelse\n {\n $max_size=\ 0;#unlimited\n }\nif ($cl=~/\\-force/)\n {\n \ $force=1;\n }\nelse\n {\n $force=0;\n }\n\ni\ f ($cl=~/\\-age=(\\S+)/)\n {\n $max_age=$1;\n \ }\nelse\n {\n $max_age=0;#unlimited\n }\n\n$\ max_size*=1000000;\nif ( ! -d $dir)\n {\n prin\ t STDERR \"\\nCannot process $dir: does not exist \ \\n\";\n exit (EXIT_FAILURE);\n }\n\nif ( !($d\ ir=~/^\\//))\n {\n $base=cwd();\n $dir=\"$b\ ase/$dir\";\n }\n\n$proceed=0;\nforeach $s (@suff\ ix)\n {\n \n if (($dir=~/$s/)){$proceed=1;}\ \n $s=uc ($s);\n if (($dir=~/$s/)){$proceed=\ 1;}\n }\nif ( $proceed==0)\n {\n print STDERR\ \"Clean_cache.pl can only clean directories whose\ absolute path name contains the following strings\ :\";\n foreach $w (@suffix) {print STDERR \"$w \ \";$w=lc($w); print STDERR \"$w \";}\n print ST\ DERR \"\\nCannot process $dir\\n\";\n exit (EXI\ T_FAILURE);\n }\n\n$name_file=\"$dir/name_file.tx\ t\";\n$size_file=\"$dir/size_file.txt\";\nif ( $fo\ rce){&create_ref_file ($dir,$name_file,$size_file)\ ;}\nif ($file){&add_file ($dir, $name_file, $size_\ file, $file);}\n&clean_dir ($dir, $name_file, $siz\ e_file, $max_size,$max_age);\nexit (EXIT_SUCCESS);\ \n\nsub clean_dir \n {\n my ($dir, $name_file,\ $size_file, $max_size, $max_age)=@_;\n my ($to\ t_size, $size, $f, $s);\n\n \n $tot_size=&get_\ tot_size ($dir, $name_file, $size_file);\n\n if\ ( $tot_size<=$max_size){return ;}\n else {$max\ _size/=2;}\n \n #recreate the name file in c\ ase some temprary files have not been properly reg\ istered\n &create_ref_file ($dir, $name_file, $\ size_file, $max_age);\n \n $new_name_file=&vtm\ pnam();\n open (R, \"$name_file\");\n open (\ W, \">$new_name_file\");\n while ()\n {\ \n my $line=$_;\n \n ($f, $s)=($line=~/(\\S+) (\\S\ +)/);\n if ( !($f=~/\\S/)){next;}\n \n elsif ($max\ _size && $tot_size>=$max_size && !($f=~/name_file/\ ))\n {\n remove ( \"$dir/$f\");\n $tot_s\ ize-=$s;\n }\n elsif ( $max_age && -M(\"$dir/$f\\ ")>=$max_age)\n {\n remove ( \"$dir/$f\");\n\ $tot_size-=$s;\n }\n else\n {\n print\ W \"$f $s\\n\";\n }\n }\n close (R);\n \ close (W);\n open (F, \">$size_file\");\n \ print F \"$tot_size\";\n if ( -e $new_name_fil\ e){`mv $new_name_file $name_file`;}\n close (F)\ ;\n }\nsub get_tot_size\n {\n my ($dir, $name\ _file, $size_file)=@_;\n my $size;\n \n i\ f ( !-d $dir){return 0;}\n if ( !-e $name_file)\ \n {\n \n &create_ref_file ($dir, $name_file,\ $size_file);\n }\n open (F, \"$size_file\\ ");\n $size=;\n close (F);\n chomp ($s\ ize);\n return $size;\n }\nsub size \n {\n \ my $f=@_[0];\n\n if ( !-d $f){return -s($f);}\\ n else {return &dir2size($f);}\n }\nsub dir2si\ ze\n {\n my $d=@_[0];\n my ($s, $f);\n \\ n if ( !-d $d) {return 0;}\n \n foreach $\ f (&dir2list ($d))\n {\n if ( -d $f){$s+=&dir\ 2size (\"$d/$f\");}\n else {$s+= -s \"$dir/$f\";}\\ n }\n return $s;\n }\n\nsub remove \n {\\ n my $file=@_[0];\n my ($f);\n \n debu\ g_print( \"--- $file ---\\n\");\n if (($file eq\ \".\") || ($file eq \"..\") || ($file=~/\\*/)){re\ turn EXIT_FAILURE;}\n elsif ( !-d $file)\n \ {\n debug_print (\"unlink $file\\n\");\n if (-e $\ file){unlink ($file);}\n }\n elsif ( -d $f\ ile)\n {\n debug_print (\"++++++++ $file ++++\ +++\\n\");\n foreach $f (&dir2list($file))\n {\n\ &remove (\"$file/$f\");\n }\n debug_print (\ \"rmdir $file\\n\");\n rmdir $file;\n }\n \ else\n {\n debug_print (\"????????? $file ???\ ?????\\n\");\n }\n return EXIT_SUCCESS;\n \ }\n\nsub dir2list\n {\n my $dir=@_[0];\n m\ y (@list1, @list2,@list3, $l);\n\n opendir (DIR\ ,$dir);\n @list1=readdir (DIR);\n closedir (\ DIR);\n \n foreach $l (@list1)\n {\n if\ ( $l ne \".\" && $l ne \"..\"){@list2=(@list2, $l\ );}\n }\n @list3 = sort { (-M \"$dir/$list\ 2[$b]\") <=> (-M \"$dir/$list2[$a]\")} @list2;\n \ return @list3;\n \n }\n\nsub debug_print\n \ {\n \n if ($DEBUG==1){print @_;}\n \n }\\ nsub create_ref_file\n {\n my ($dir,$name_file\ ,$size_file)=@_;\n my ($f, $s, $tot_size, @l);\\ n \n if ( !-d $dir){return;}\n \n @l=&\ dir2list ($dir);\n open (F, \">$name_file\");\n\ foreach $f (@l)\n {\n $s=&size(\"$dir/$f\\ ");\n $tot_size+=$s;\n print F \"$f $s\\n\";\n \ }\n &myecho ($tot_size, \">$size_file\");\n \ close (F);\n }\nsub add_file \n {\n my ($di\ r,$name_file,$size_file,$file)=@_;\n my ($s, $t\ ot_size);\n \n if ( !-d $dir) {return;}\n \ if ( !-e \"$dir/$file\" ) {return;}\n if ( !\ -e $name_file){&create_ref_file ($dir,$name_file,$\ size_file);}\n \n $s=&size(\"$dir/$file\ \");\n open (F, \">>$name_file\");\n print F\ \"$file\\n\";\n close (F);\n\n $tot_size=&g\ et_tot_size ($dir,$name_file,$size_file);\n $to\ t_size+=$s;\n &myecho ($tot_size, \">$size_file\ \");\n \n }\n \nsub myecho\n {\n my ($stri\ ng, $file)=@_;\n open (ECHO, $file) || die;\n \ print ECHO \"$string\";\n close (ECHO);\n }\\ n \n \n \nsub vtmpnam\n {\n my $tmp_file_n\ ame;\n $tmp_name_counter++;\n $tmp_file_name\ =\"tmp_file_for_clean_cache_pdb$$.$tmp_name_counte\ r\";\n $tmp_file_list[$ntmp_file++]=$tmp_file_n\ ame;\n if ( -e $tmp_file_name) {return &vtmpnam\ ();}\n else {return $tmp_file_name;}\n }\n","\ \n$t_coffee=\"t_coffee\";\n\nforeach $value ( @ARG\ V)\n {\n $seq_file=$seq_file.\" \".$value;\n \ }\n\n$name=$ARGV[0];\n$name=~s/\\.[^\\.]*$//;\n$li\ b_name=\"$name.mocca_lib\";\n$type=`t_coffee $seq_\ file -get_type -quiet`;\nchop ($type);\n\nif ( $ty\ pe eq \"PROTEIN\"){$lib_mode=\"lalign_rs_s_pair -l\ align_n_top 20\";}\nelsif ( $type eq\"DNA\"){$lib_\ mode=\"lalign_rs_s_dna_pair -lalign_n_top 40\";}\n\ \nif ( !(-e $lib_name))\n {\n \n $command=\"$t\ _coffee -mocca -seq_weight=no -cosmetic_penalty=0 \ -mocca_interactive -in $lib_mode -out_lib $lib_nam\ e -infile $seq_file\";\n \n }\nelsif ( (-e $lib_\ name))\n {\n $command=\"$t_coffee -mocca -seq_we\ ight=no -cosmetic_penalty=0 -mocca_interactive -in\ $lib_name -infile $seq_file\";\n \n }\n\nsystem\ ($command);\n\nexit;\n\n","my $WSDL = 'http://www\ .ebi.ac.uk/Tools/webservices/wsdl/WSDaliLite.wsdl'\ ;\n\nuse SOAP::Lite;\nuse Data::Dumper;\nuse Getop\ t::Long qw(:config no_ignore_case bundling);\nuse \ File::Basename;\n\nmy $checkInterval = 5;\n\nmy %p\ arams=(\n 'async' => '1', # Use async mode and\ simulate sync mode in client\n );\nGetOptions\ (\n 'pdb1=s' => \\$params{'sequence1'},\n \ 'chainid1=s' => \\$params{'chainid1'},\n 'pdb\ 2=s' => \\$params{'sequence2'},\n 'chainid2\ =s' => \\$params{'chainid2'},\n \"help|h\" => \ \\$help, # Usage info\n \"async|a\" => \\$asyn\ c, # Asynchronous submission\n \"polljob\" => \ \\$polljob, # Get results\n \"status\" => \\$s\ tatus, # Get status\n \"jobid|j=s\" => \\$jobi\ d, # JobId\n \"email|S=s\" => \\$params{email}\ , # E-mail address\n \"trace\" => \\$trace\ , # SOAP messages\n \"sequence=s\" => \\$sequen\ ce, # Input PDB\n );\n\nmy $scriptName = basena\ me($0, ());\nif($help) {\n &usage();\n exit(\ 0);\n}\n\nif($trace) {\n print \"Tracing active\ \\n\";\n SOAP::Lite->import(+trace => 'debug');\ \n}\n\nmy $soap = SOAP::Lite\n ->service($WSDL)\ \n ->on_fault(sub {\n my $soap = shift;\\ n my $res = shift;\n # Throw an exce\ ption for all faults\n if(ref($res) eq '') \ {\n die($res);\n } else {\n \ die($res->faultstring);\n }\n \ return new SOAP::SOM;\n }\n );\n\ \nif( !($polljob || $status) &&\n !( defined($p\ arams{'sequence1'}) && defined($params{'sequence2'\ }) )\n ) {\n print STDERR 'Error: bad option\ combination', \"\\n\";\n &usage();\n exit(1\ );\n}\nelsif($polljob && defined($jobid)) {\n p\ rint \"Getting results for job $jobid\\n\";\n g\ etResults($jobid);\n}\nelsif($status && defined($j\ obid)) {\n print STDERR \"Getting status for jo\ b $jobid\\n\";\n my $result = $soap->checkStatu\ s($jobid);\n print STDOUT \"$result\", \"\\n\";\ \n if($result eq 'DONE') {\n print STDERR \"To \ get results: $scriptName --polljob --jobid $jobid\\ \n\";\n }\n}\nelse {\n if(-f $params{'sequen\ ce1'}) {\n $params{'sequence1'} = read_file($param\ s{'sequence1'});\n }\n if(-f $params{'sequen\ ce2'}) {\n $params{'sequence2'} = read_file($param\ s{'sequence2'});\n }\n\n my $jobid;\n my \ $paramsData = SOAP::Data->name('params')->type(map\ =>\\%params);\n # For SOAP::Lite 0.60 and earli\ er parameters are passed directly\n if($SOAP::L\ ite::VERSION eq '0.60' || $SOAP::Lite::VERSION =~ \ /0\\.[1-5]/) {\n $jobid = $soap->runDaliLit\ e($paramsData);\n }\n # For SOAP::Lite 0.69 \ and later parameter handling is different, so pass\ \n # undef's for templated params, and then pas\ s the formatted args.\n else {\n $jobid \ = $soap->runDaliLite(undef,\n $paramsData)\ ;\n }\n\n if (defined($async)) {\n print STD\ OUT $jobid, \"\\n\";\n print STDERR \"To ch\ eck status: $scriptName --status --jobid $jobid\\n\ \";\n } else { # Synchronous mode\n prin\ t STDERR \"JobId: $jobid\\n\";\n sleep 1;\n\ getResults($jobid);\n }\n}\n\nsub clien\ tPoll($) {\n my $jobid = shift;\n my $result\ = 'PENDING';\n # Check status and wait if not \ finished\n #print STDERR \"Checking status: $jo\ bid\\n\";\n while($result eq 'RUNNING' || $resu\ lt eq 'PENDING') {\n $result = $soap->check\ Status($jobid);\n print STDERR \"$result\\n\ \";\n if($result eq 'RUNNING' || $result eq\ 'PENDING') {\n # Wait before polling a\ gain.\n sleep $checkInterval;\n \ }\n }\n}\n\nsub getResults($) {\n $jobid = s\ hift;\n # Check status, and wait if not finishe\ d\n clientPoll($jobid);\n # Use JobId if out\ put file name is not defined\n unless(defined($\ outfile)) {\n $outfile=$jobid;\n }\n \ # Get list of data types\n my $resultTypes = $s\ oap->getResults($jobid);\n # Get the data and w\ rite it to a file\n if(defined($outformat)) { #\ Specified data type\n my $selResultType;\n\ foreach my $resultType (@$resultTypes) {\n\ if($resultType->{type} eq $outformat) \ {\n $selResultType = $resultType;\n\ }\n }\n $res=$soap->poll\ ($jobid, $selResultType->{type});\n write_f\ ile($outfile.'.'.$selResultType->{ext}, $res);\n \ } else { # Data types available\n # Write\ a file for each output type\n for my $resu\ ltType (@$resultTypes){\n #print \"Gett\ ing $resultType->{type}\\n\";\n $res=$s\ oap->poll($jobid, $resultType->{type});\n \ write_file($outfile.'.'.$resultType->{ext}, $re\ s);\n }\n }\n}\n\nsub read_file($) {\n \ my $filename = shift;\n open(FILE, $filename)\ ;\n my $content;\n my $buffer;\n while(sy\ sread(FILE, $buffer, 1024)) {\n $content.= $buffer\ ;\n }\n close(FILE);\n return $content;\n\ }\n\nsub write_file($$) {\n my ($tmp,$entity) =\ @_;\n print STDERR \"Creating result file: \".\ $tmp.\"\\n\";\n unless(open (FILE, \">$tmp\")) \ {\n return 0;\n }\n syswrite(FILE, $entity);\ \n close (FILE);\n return 1;\n}\n\nsub usage\ {\n print STDERR < [options] pdbFile [--outfile \ string]\n Returns: saves the results to disk\n\nA\ synchronous job:\n\n Use this if you want to retr\ ieve the results at a later time. The results \n \ are stored for up to 24 hours. \n The asynchronou\ s submission mode is recommended when users are su\ bmitting \n batch jobs or large database searches\ \n Usage: $scriptName --email --a\ sync [options] pdbFile\n Returns: jobid\n\n Use \ the jobid to query for the status of the job. \n \ Usage: $scriptName --status --jobid \n Ret\ urns: string indicating the status of the job:\n \ DONE - job has finished\n RUNNING - job is ru\ nning\n NOT_FOUND - job cannot be found\n ER\ ROR - the jobs has encountered an error\n\n When \ done, use the jobid to retrieve the status of the \ job. \n Usage: $scriptName --polljob --jobid [--outfile string]\n\n[Help]\n\n For more det\ ailed help information refer to\n http://www.ebi.\ ac.uk/DaliLite/\nEOF\n;\n}\n","my $WSDL = 'http://\ www.ebi.ac.uk/Tools/webservices/wsdl/WSWUBlast.wsd\ l';\n\nuse strict;\nuse SOAP::Lite;\nuse Getopt::L\ ong qw(:config no_ignore_case bundling);\nuse File\ ::Basename;\n\nmy $checkInterval = 15;\n\nmy $numO\ pts = scalar(@ARGV);\nmy ($outfile, $outformat, $h\ elp, $async, $polljob, $status, $ids, $jobid, $tra\ ce, $sequence);\nmy %params= ( # Defaults\n \ 'async' => 1, # Force into async mode\n 'exp\ ' => 10.0, # E-value threshold\n 'numal' => \ 50, # Maximum number of alignments\n 'scores\ ' => 100, # Maximum number of scores\n \ );\nGetOptions( # Map the options into variables\n\ \"program|p=s\" => \\$params{program}, # B\ LAST program\n \"database|D=s\" => \\$params\ {database}, # Search database\n \"matrix|m=s\" \ => \\$params{matrix}, # Scoring matrix\n \\ "exp|E=f\" => \\$params{exp}, # E-value th\ reshold\n \"echofilter|e\" => \\$params{echo\ filter}, # Display filtered sequence\n \"filter\ |f=s\" => \\$params{filter}, # Low complexity\ filter name\n \"alignments|b=i\" => \\$params\ {numal}, # Number of alignments\n \"scores|s=i\\ " => \\$params{scores}, # Number of scores\n \ \"sensitivity|S=s\" => \\$params{sensitivity}, \ # Search sensitivity\n \"sort|t=s\" => \\\ $params{sort}, # Sort hits by...\n \"stats|T=s\\ " => \\$params{stats}, # Scoring statistic t\ o use\n \"strand|d=s\" => \\$params{strand\ }, # Strand to use in DNA vs. DNA search\n \"to\ pcombon|c=i\" => \\$params{topcombon}, # Consist\ ent sets of HSPs\n \"outfile=s\" => \\$ou\ tfile, # Output file\n \"outformat|o=s\" => \\ \$outformat, # Output format\n \"help|h\" \ => \\$help, # Usage info\n \"async|a\" =\ > \\$async, # Asynchronous mode\n \"polljob\" \ => \\$polljob, # Get results\n \"status\" \ => \\$status, # Get job status\n \"ids\" \ => \\$ids, # Get ids from result\n \ \"jobid|j=s\" => \\$jobid, # JobId\n \"em\ ail=s\" => \\$params{email}, # E-mail addr\ ess\n \"trace\" => \\$trace, # SOAP t\ race\n \"sequence=s\" => \\$sequence, # Qu\ ery sequence\n );\n\nmy $scriptName = basename(\ $0, ());\nif($help || $numOpts == 0) {\n &usage\ ();\n exit(0);\n}\n\nif($trace){\n print STD\ ERR \"Tracing active\\n\";\n SOAP::Lite->import\ (+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\ ->service($WSDL)\n ->proxy('http://localhos\ t/',\n #proxy => ['http' => 'http://your.proxy.\ server/'], # HTTP proxy\n timeout => 600, # HTT\ P connection timeout\n )\n ->on_fault(sub { \ # SOAP fault handler\n my $soap = shift;\n \ my $res = shift;\n # Throw an except\ ion for all faults\n if(ref($res) eq '') {\\ n die($res);\n } else {\n \ die($res->faultstring);\n }\n r\ eturn new SOAP::SOM;\n }\n );\n\n\ if( !($polljob || $status || $ids) &&\n !( defi\ ned($ARGV[0]) || defined($sequence) )\n ) {\n \ print STDERR 'Error: bad option combination', \"\ \\n\";\n &usage();\n exit(1);\n}\nelsif($pol\ ljob && defined($jobid)) {\n print \"Getting re\ sults for job $jobid\\n\";\n getResults($jobid)\ ;\n}\nelsif($status && defined($jobid)) {\n pri\ nt STDERR \"Getting status for job $jobid\\n\";\n \ my $result = $soap->checkStatus($jobid);\n p\ rint STDOUT \"$result\\n\";\n if($result eq 'DO\ NE') {\n print STDERR \"To get results: $scriptNam\ e --polljob --jobid $jobid\\n\";\n }\n} \nelsi\ f($ids && defined($jobid)) {\n print STDERR \"G\ etting ids from job $jobid\\n\";\n getIds($jobi\ d);\n}\nelse {\n # Prepare input data\n my $\ content;\n my (@contents) = ();\n if(-f $ARG\ V[0] || $ARGV[0] eq '-') { \n $content={type=>'seq\ uence',content=>read_file($ARGV[0])}; \n }\n \ if($sequence) { \n if(-f $sequence || $sequence e\ q '-') { \n $content={type=>'sequence',content\ =>read_file($ARGV[0])}; \n } else {\n $content\ ={type=>'sequence',content=>$sequence};\n }\n }\ \n push @contents, $content;\n\n # Submit th\ e job\n my $paramsData = SOAP::Data->name('para\ ms')->type(map=>\\%params);\n my $contentData =\ SOAP::Data->name('content')->value(\\@contents);\\ n # For SOAP::Lite 0.60 and earlier parameters \ are passed directly\n if($SOAP::Lite::VERSION e\ q '0.60' || $SOAP::Lite::VERSION =~ /0\\.[1-5]/) {\ \n $jobid = $soap->runWUBlast($paramsData, \ $contentData);\n }\n # For SOAP::Lite 0.69 a\ nd later parameter handling is different, so pass\\ n # undef's for templated params, and then pass\ the formatted args.\n else {\n $jobid =\ $soap->runWUBlast(undef, undef,\n $paramsDa\ ta, $contentData);\n }\n\n # Asynchronous mo\ de: output jobid and exit.\n if (defined($async\ )) {\n print STDOUT $jobid, \"\\n\";\n prin\ t STDERR \"To check status: $scriptName --status -\ -jobid $jobid\\n\";\n }\n # Synchronous mode\ : try to get results\n else {\n print ST\ DERR \"JobId: $jobid\\n\";\n sleep 1;\n \ getResults($jobid);\n }\n}\n\nsub getIds($)\ {\n my $jobid = shift;\n my $results = $soa\ p->getIds($jobid);\n for my $result (@$results)\ {\n print \"$result\\n\";\n }\n}\n\nsub clientP\ oll($) {\n my $jobid = shift;\n my $result =\ 'PENDING';\n # Check status and wait if not fi\ nished\n while($result eq 'RUNNING' || $result \ eq 'PENDING') {\n $result = $soap->checkSta\ tus($jobid);\n print STDERR \"$result\\n\";\ \n if($result eq 'RUNNING' || $result eq 'P\ ENDING') {\n # Wait before polling agai\ n.\n sleep $checkInterval;\n }\n\ }\n}\n\nsub getResults($) {\n my $jobid = s\ hift;\n my $res;\n # Check status, and wait \ if not finished\n clientPoll($jobid);\n # Us\ e JobId if output file name is not defined\n un\ less(defined($outfile)) {\n $outfile=$jobid\ ;\n }\n # Get list of data types\n my $re\ sultTypes = $soap->getResults($jobid);\n # Get \ the data and write it to a file\n if(defined($o\ utformat)) { # Specified data type\n if($outformat\ eq 'xml') {$outformat = 'toolxml';}\n if($outform\ at eq 'txt') {$outformat = 'tooloutput';}\n \ my $selResultType;\n foreach my $resultTyp\ e (@$resultTypes) {\n if($resultType->{\ type} eq $outformat) {\n $selResult\ Type = $resultType;\n }\n }\n \ $res=$soap->poll($jobid, $selResultType->{typ\ e});\n if($outfile eq '-') {\n write_file($ou\ tfile, $res);\n } else {\n write_file($outfile\ .'.'.$selResultType->{ext}, $res);\n }\n } else\ { # Data types available\n # Write a file \ for each output type\n for my $resultType (\ @$resultTypes){\n #print STDERR \"Getti\ ng $resultType->{type}\\n\";\n $res=$so\ ap->poll($jobid, $resultType->{type});\n if($o\ utfile eq '-') {\n write_file($outfile, $res);\n \ } else {\n write_file($outfile.'.'.$resultTyp\ e->{ext}, $res);\n }\n }\n }\n}\n\ns\ ub read_file($) {\n my $filename = shift;\n \ my ($content, $buffer);\n if($filename eq '-') \ {\n while(sysread(STDIN, $buffer, 1024)) {\n $\ content .= $buffer;\n }\n }\n else { # File\\ n open(FILE, $filename) or die \"Error: unable to \ open input file\";\n while(sysread(FILE, $buffer, \ 1024)) {\n $content .= $buffer;\n }\n close(FI\ LE);\n }\n return $content;\n}\n\nsub write_\ file($$) {\n my ($filename, $data) = @_;\n p\ rint STDERR 'Creating result file: ' . $filename .\ \"\\n\";\n if($filename eq '-') {\n print STDO\ UT $data;\n }\n else {\n open(FILE, \">$file\ name\") or die \"Error: unable to open output file\ \";\n syswrite(FILE, $data);\n close(FILE);\n }\ \n}\n\nsub usage {\n print STDERR < [options...] seqFile\ \n Returns: saves the results to disk\n\nAsynchro\ nous job:\n\n Use this if you want to retrieve th\ e results at a later time. The results \n are sto\ red for up to 24 hours. \n The asynchronous submi\ ssion mode is recommended when users are submittin\ g \n batch jobs or large database searches \n Us\ age: $scriptName --async --email [o\ ptions...] seqFile\n Returns : jobid\n\n Use the\ jobid to query for the status of the job. \n Usa\ ge: $scriptName --status --jobid \n Return\ s : string indicating the status of the job:\n \ DONE - job has finished\n RUNNING - job is runn\ ing\n NOT_FOUND - job cannot be found\n ERRO\ R - the jobs has encountered an error\n\n When do\ ne, use the jobid to retrieve the status of the jo\ b. \n Usage: $scriptName --polljob --jobid [--outfile string]\n Returns: saves the results\ to disk\n\n[Help]\n\nFor more detailed help infor\ mation refer to \nhttp://www.ebi.ac.uk/blast2/WU-B\ last2_Help_frame.html\n \nEOF\n;\n}\n","\nmy $WSDL\ = 'http://www.ebi.ac.uk/Tools/webservices/wsdl/WS\ Blastpgp.wsdl';\n\nuse SOAP::Lite;\nuse Getopt::Lo\ ng qw(:config no_ignore_case bundling);\nuse File:\ :Basename;\n\nmy $checkInterval = 15;\n\nmy %param\ s=(\n 'async' => '1', # Use async mode and sim\ ulate sync mode in client\n );\nGetOptions(\n \ \"mode=s\" => \\$params{mode}, # Sear\ ch mode: PSI-Blast or PHI-Blast\n \"database|d=\ s\" => \\$params{database}, # Database to sear\ ch\n \"matrix|M=s\" => \\$params{matrix},\ # Scoring maxtrix\n \"exp|e=f\" => \\$\ params{exp}, # E-value\n \"expmulti|h=f\" =\ > \\$params{expmulti}, # E-value\n \"filter|F=s\ \" => \\$params{filter}, # Low complexity fi\ lter\n \"dropoff|X=i\" => \\$params{dropof\ f}, # Dropoff score\n \"finaldropoff|Z=i\" => \\ \$params{finaldropoff}, # Final dropoff score\n \ \"scores|v=i\" => \\$params{scores}, # Max \ number of scores\n \"align=i\" => \\$p\ arams{align}, # Alignment view\n \"startregion|\ S=i\" => \\$params{startregion}, # Start of regio\ n in query\n \"endregion|H=i\" => \\$params{\ endregion}, # End of region in query\n \"maxpas\ ses|j=i\" => \\$params{maxpasses}, # Number of \ PSI iterations\n \"opengap|G=i\" => \\$par\ ams{opengap}, # Gap open penalty\n \"extendgap|\ E=i\" => \\$params{extendgap}, # Gap extension \ penalty\n \"pattern=s\" => \\$params{pat\ tern}, # PHI-BLAST pattern\n \"usagemode|p=s\" \ => \\$params{usagemode}, # PHI-BLAST program\n \ \"appxml=s\" => \\$params{appxml}, # Ap\ plication XML\n \"sequence=s\" => \\$sequ\ ence, # Query sequence\n \"help\" => \\$\ help, # Usage info\n \"polljob\" => \\$p\ olljob, # Get results\n \"status\" => \\\ $status, # Get status\n \"ids\" =>\ \\$ids, # Get ids from result\n \"jobid=s\" \ => \\$jobid, # JobId\n \"outfile=s\" \ => \\$outfile, # Output filename\n \"outfor\ mat|o=s\" => \\$outformat, # Output file format\ \n \"async|a\" => \\$async, # Async subm\ ission\n \"email=s\" => \\$params{emai\ l}, # User e-mail address\n \"trace\" \ => \\$trace, # Show SOAP messages\n );\n\nmy \ $scriptName = basename($0, ());\nif($help) {\n \ &usage();\n exit(0);\n}\n\nif ($trace){\n pr\ int \"Tracing active\\n\";\n SOAP::Lite->import\ (+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\ ->service($WSDL)\n ->on_fault(sub {\n \ my $soap = shift;\n my $res = shift;\n \ # Throw an exception for all faults\n \ if(ref($res) eq '') {\n die($res);\n \ } else {\n die($res->faultstring);\ \n }\n return new SOAP::SOM;\n }\\ n );\n\nif( !($polljob || $status ||\ $ids) &&\n !( (defined($ARGV[0]) && -f $ARGV[0\ ]) || defined($sequence) )\n ) {\n print STD\ ERR 'Error: bad option combination', \"\\n\";\n \ &usage();\n exit(1);\n}\nelsif($polljob && def\ ined($jobid)) {\n print \"Getting results for j\ ob $jobid\\n\";\n getResults($jobid);\n}\nelsif\ ($status && defined($jobid)) {\n print STDERR \\ "Getting status for job $jobid\\n\";\n my $resu\ lt = $soap->checkStatus($jobid);\n print STDOUT\ $result, \"\\n\";\n if($result eq 'DONE') {\n \ print STDERR \"To get results: $scriptName --pollj\ ob --jobid $jobid\\n\";\n }\n} \nelsif($ids &&\ defined($jobid)) {\n print STDERR \"Getting id\ s from job $jobid\\n\";\n getIds($jobid);\n}\ne\ lse {\n if(-f $ARGV[0]) { \n $content={type=>'s\ equence', content=>read_file($ARGV[0])}; \n }\n\ if($sequence) { \n if(-f $sequence) {\n $c\ ontent={type=>'sequence', content=>read_file($sequ\ ence)}; \n } else {\n $content={type=>'sequenc\ e', content=>$sequence};\n }\n }\n push @con\ tent, $content;\n\n my $jobid;\n my $paramsD\ ata = SOAP::Data->name('params')->type(map=>\\%par\ ams);\n my $contentData = SOAP::Data->name('con\ tent')->value(\\@content);\n # For SOAP::Lite 0\ .60 and earlier parameters are passed directly\n \ if($SOAP::Lite::VERSION eq '0.60' || $SOAP::Lite\ ::VERSION =~ /0\\.[1-5]/) {\n $jobid = $soa\ p->runBlastpgp($paramsData, $contentData);\n }\\ n # For SOAP::Lite 0.69 and later parameter han\ dling is different, so pass\n # undef's for tem\ plated params, and then pass the formatted args.\n\ else {\n $jobid = $soap->runBlastpgp(un\ def, undef,\n $paramsData, $contentData);\n\ }\n\n if (defined($async)) {\n print STDOUT\ $jobid, \"\\n\";\n print STDERR \"To check\ status: $scriptName --status --jobid $jobid\\n\";\ \n } else { # Synchronous mode\n print S\ TDERR \"JobId: $jobid\\n\";\n sleep 1;\n \ getResults($jobid);\n }\n}\n\nsub getIds($\ ) {\n $jobid = shift;\n my $results = $soap-\ >getIds($jobid);\n for $result (@$results){\n p\ rint \"$result\\n\";\n }\n}\n\nsub clientPoll($\ ) {\n my $jobid = shift;\n my $result = 'PEN\ DING';\n # Check status and wait if not finishe\ d\n #print STDERR \"Checking status: $jobid\\n\\ ";\n while($result eq 'RUNNING' || $result eq '\ PENDING') {\n $result = $soap->checkStatus(\ $jobid);\n print STDERR \"$result\\n\";\n \ if($result eq 'RUNNING' || $result eq 'PENDI\ NG') {\n # Wait before polling again.\n\ sleep $checkInterval;\n }\n \ }\n}\n\nsub getResults($) {\n $jobid = shift;\n\ # Check status, and wait if not finished\n \ clientPoll($jobid);\n # Use JobId if output fil\ e name is not defined\n unless(defined($outfile\ )) {\n $outfile=$jobid;\n }\n # Get l\ ist of data types\n my $resultTypes = $soap->ge\ tResults($jobid);\n # Get the data and write it\ to a file\n if(defined($outformat)) { # Specif\ ied data type\n my $selResultType;\n \ foreach my $resultType (@$resultTypes) {\n \ if($resultType->{type} eq $outformat) {\n \ $selResultType = $resultType;\n \ }\n }\n $res=$soap->poll($jobid\ , $selResultType->{type});\n write_file($ou\ tfile.'.'.$selResultType->{ext}, $res);\n } els\ e { # Data types available\n # Write a file\ for each output type\n for my $resultType \ (@$resultTypes){\n #print \"Getting $re\ sultType->{type}\\n\";\n $res=$soap->po\ ll($jobid, $resultType->{type});\n writ\ e_file($outfile.'.'.$resultType->{ext}, $res);\n \ }\n }\n}\n\nsub read_file($) {\n my $f\ ilename = shift;\n open(FILE, $filename);\n \ my $content;\n my $buffer;\n while(sysread(F\ ILE, $buffer, 1024)) {\n $content.= $buffer;\n \ }\n close(FILE); \n return $content;\n}\n\n\ sub write_file($$) {\n my ($tmp,$entity) = @_;\\ n print STDERR \"Creating result file: \".$tmp.\ \"\\n\";\n unless(open (FILE, \">$tmp\")) {\n r\ eturn 0;\n }\n syswrite(FILE, $entity);\n \ close (FILE);\n return 1;\n}\n\nsub usage {\n \ print STDERR < [options...] seqfile\n Returns: saves\ the results to disk\n\nAsynchronous job:\n\n Use\ this if you want to retrieve the results at a lat\ er time. The results\n are stored for up to 24 ho\ urs.\n The asynchronous submission mode is recomm\ ended when users are submitting\n batch jobs or l\ arge database searches\n Usage: blastpgp.pl --ema\ il --async [options...] seqFile\n Re\ turns: jobid\n\n Use the jobid to query for the s\ tatus of the job.\n Usage: blastpgp.pl --status -\ -jobid \n Returns: string indicating the s\ tatus of the job\n DONE - job has finished\n \ RUNNING - job is running\n NOT_FOUND - job can\ not be found\n ERROR - the jobs has encountered\ an error\n\n When done, use the jobid to retriev\ e the results of the job.\n Usage: blastpgp.pl --\ polljob --jobid [--outfile ]\n \ Returns: saves the results to disk\nEOF\n;\n}\n","\ \n\n\nmy $PROBTRESH = 0.3;# base pairs below this \ prob threshold will be ignored\nmy $WEIGHT = 100.0\ ; # float!!\nmy $NUCALPH = \"ACGTUNRYMKSWHBVD\";\n\ use vars qw($NUCALPH $WEIGHT);\n\nmy $myname = bas\ ename($0);\n\nuse strict;\nuse warnings;\n\nuse Fi\ le::Basename;\nuse Getopt::Long;\nuse File::Glob '\ :glob';\nuse File::Spec;\nuse File::Temp qw/ tempf\ ile tempdir /;\n\n\n\n\nsub tcoffeelib_header($;$)\ \n{\n my ($nseq, $fd) = @_;\n if (! defined(\ $fd)) {\n $fd = *STDOUT;\n }\n printf\ $fd \"! TC_LIB_FORMAT_01\\n\";\n printf $fd \"\ %d\\n\", $nseq;\n}\n\n\nsub tcoffeelib_header_adds\ eq($$;$)\n{\n my ($id, $seq, $fd) = @_;\n if\ (! defined($fd)) {\n $fd = *STDOUT;\n }\ \n printf $fd \"%s %d %s\\n\", $id, length($seq\ ), $seq;\n}\n\n\nsub tcoffeelib_comment($;$)\n{\n \ my ($comment, $fd) = @_;\n if (! defined($fd\ )) {\n $fd = *STDOUT;\n }\n printf $f\ d \"!\" . $comment . \"\\n\";\n}\n\n\nsub tcoffeel\ ib_struct($$$;$)\n{\n my ($nseq, $len, $bpm, $f\ d) = @_;\n\n if (! defined($fd)) {\n $fd\ = *STDOUT;\n }\n\n # output basepair indice\ s with fixed weight\n printf $fd \"#%d %d\\n\",\ $nseq, $nseq;\n # output basepairs (only once)\ and with unit-offset\n for (my $i=0; $i<$len; \ $i++) {\n for (my $j=$i+1; $j<$len; $j++) {\ \n if (! defined($bpm->[$i][$j])) {\n \ print STDERR \"ERROR: \\$bpm->[$i][$\ j] undefined\\n\";\n }\n if \ ($bpm->[$i][$j]>0) {\n print $fd $i\ +1;\n print $fd \" \";\n \ print $fd $j+1;\n print $fd \"\ \" . $bpm->[$i][$j] . \"\\n\";\n }\n \ }\n }\n}\n\n\nsub tcoffeelib_footer(;$)\n\ {\n my ($fd) = @_;\n if (! defined($fd)) {\n\ $fd = *STDOUT;\n }\n print $fd \"! S\ EQ_1_TO_N\\n\";\n}\n\n\n \nsub plfold($$$)\n{ \ \n my ($id, $seq, $probtresh) = @_;\n my (\ @struct);# return\n my ($templ, $fhtmp, $fnamet\ mp, $cmd, $ctr, $window_size);\n\n $templ = $my\ name . \".\" . $id . \".pid-\" . $$ . \".XXXXXX\";\ \n ($fhtmp, $fnametmp) = tempfile($templ, UNLIN\ K => 1); \n print $fhtmp \">$id\\n$seq\\n\";\n\\ n # --- init basepair array\n #\n for (my\ $i=0; $i/dev/n\ ull\";\n system($cmd);\n \n if ($? != 0) \ {\n printf STDERR \"ERROR: RNAplfold ($cmd)\ exited with error status %d\\n\", $? >> 8;\n \ return;\n }\n #unlink($fnametmp);\n my\ $fps = sprintf(\"%s_dp.ps\", $id); # check long n\ ame\n \n if (! -s $fps) {\n {\n\n $fps \ = sprintf(\"%s_dp.ps\", substr($id,0,12)); # check\ short name\n if (! -s $fps)\n {\n die(\"co\ uldn't find expected file $fps\\n\");\n return\ ;\n }\n }\n }\n\n \n # --- read ba\ se pairs from created postscript\n #\n open(\ FH, $fps);\n while (my $line = ) {\n \ my ($nti, $ntj, $prob);\n chomp($line); \ \n # line: bp bp sqrt-prob ubox\n \ my @match = ($line =~ m/^([0-9]+) +([0-9]+) +([\ 0-9\\.]+) +ubox$/);\n if (scalar(@match)) {\ \n $nti=$1;\n $ntj=$2;\n \ $prob=$3*$3;# prob stored as square root\n\ \n if ($prob>$probtresh) {\n \ #printf STDERR \"\\$struct[$nti][$ntj] sqrtpr\ ob=$3 prob=$prob > $probtresh\\n\";\n \ $struct[$nti-1][$ntj-1] = $WEIGHT\n \ }\n # store with zero-offset\n }\ \n }\n close(FH);\n\n # remove or gzi pos\ tscript\n #\n unlink($fps);\n #\n # or\ gzip\n #$cmd = \"gzip -qf $fps\";\n #system\ ($cmd);\n #if ($? != 0) {\n # printf STDE\ RR \"ERROR: gzip ($cmd) exited with error status %\ d\\n\", $? >> 8;\n #}\n\n return \\@struct;\\ n}\n\n\n\n\n\nsub rnaseqfmt($)\n{\n my ($seq) =\ @_;\n # remove gaps\n $seq =~ s/-//g;\n \ # uppercase RNA\n $seq = uc($seq);\n # T -> \ U\n $seq =~ s/T/U/g;\n # check for invalid c\ haraters\n $_ = $seq;\n s/[^$NUCALPH]//g;\n \ return $_;\n}\n\n\n\n\nsub usage(;$)\n{ \n \ my ($errmsg) = @_;\n if ($errmsg) {\n \ print STDERR \"ERROR: $errmsg\\n\";\n }\n pr\ int STDERR << \"EOF\";\n$myname:\n Creates a T-Cof\ fee RNA structure library from RNAplfold predictio\ n.\n See FIXME:citation\nUsage:\n $myname -in seq_\ file -out tcoffee_lib\nEOF\n exit(1);\n}\n\nsub\ read_fasta_seq \n {\n my $f=$_[0];\n my %h\ seq;\n my (@seq, @com, @name);\n my ($a, $s,\ $nseq);\n\n open (F, $f);\n while ()\n \ {\n $s.=$_;\n }\n close (F);\n\n \n \ @name=($s=~/>(\\S*).*\\n[^>]*/g);\n \n @s\ eq =($s=~/>.*.*\\n([^>]*)/g);\n @com =($s=~/>(\\ \S*)(.*)\\n([^>]*)/g);\n\n\n $nseq=$#name+1;\n \ \n for ($a=0; $a<$nseq; $a++)\n {\n my $n\ =$name[$a];\n my $s;\n $hseq{$n}{name}=$n;\n $s=$s\ eq[$a];$s=~s/\\s//g;\n \n $hseq{$n}{seq}=$s;\n $hs\ eq{$n}{com}=$com[$a];\n }\n return %hseq;\\ n }\n\n\n\n\n\n\n\nmy $fmsq = \"\";\nmy $flib = \\ "\";\nmy %OPTS;\nmy %seq;\nmy ($id, $nseq, $i);\nm\ y @nl;\n\nGetOptions(\"in=s\" => \\$fmsq, \"out=s\\ " => \\$flib);\n\nif (! -s $fmsq) {\n usage(\"e\ mpty or non-existant file \\\"$fmsq\\\"\")\n}\nif \ (length($flib)==0) {\n usage(\"empty out-filena\ me\")\n}\n\n\n\n\n\n\n%seq=read_fasta_seq($fmsq);\\ n\n\n@nl=keys(%seq);\n\n$nseq=$#nl+1;\nopen FD_LIB\ , \">$flib\" or die \"can't open $flib!\";\ntcoffe\ elib_header($nseq, *FD_LIB);\nforeach $id (keys (%\ seq))\n {\n my ($seq, $fmtseq);\n \n $se\ q = $seq{$id}{seq};\n \n $fmtseq = rnaseqfmt\ ($seq);# check here, formatting for folding import\ ant later\n if (length($seq)!=length($fmtseq)) \ {\n print STDERR \"ERROR: invalid sequence \ $id is not an RNA sequence. read seq is: $seq\\n\"\ ;\n exit\n }\n \n tcoffeelib_head\ er_addseq($id, uc($seq), *FD_LIB);\n }\ntcoffeeli\ b_comment(\"generated by $myname on \" . localtime\ (), *FD_LIB);\n\n\n\n$i=0;\nforeach $id (keys (%se\ q))\n {\n my ($cleanid, $seq, $bpm);\n $seq\ =$seq{$id}{seq};\n $cleanid = $id;\n $cleani\ d =~ s,[/ ],_,g;# needed for rnaplfold\n $seq =\ rnaseqfmt($seq);\n \n $bpm = plfold($cleani\ d, rnaseqfmt($seq), $PROBTRESH); \n \n \ tcoffeelib_struct($i+1, length($seq), $bpm, *FD_L\ IB);\n $i++;\n}\n\n\ntcoffeelib_footer(*FD_LIB)\ ;\nclose FD_LIB;\nexit (0);\n\n","\n\n\n\n\n$cmd=j\ oin ' ', @ARGV;\nif ($cmd=~/-infile=(\\S+)/){ $seq\ file=$1;}\nif ($cmd=~/-outfile=(\\S+)/){ $libfile=\ $1;}\n\n\n\n%s=read_fasta_seq ($seqfile);\n\nopen \ (F, \">$libfile\");\nforeach $name (keys (%s))\n \ {\n my $tclib=\"$name.RNAplfold_tclib\";\n p\ rint (F \">$name _F_ $tclib\\n\");\n seq2RNAplf\ old2tclib ($name, $s{$name}{seq}, $tclib);\n }\nc\ lose (F);\nexit (EXIT_SUCCESS);\n\nsub seq2RNAplfo\ ld2tclib\n {\n my ($name, $seq, $tclib)=@_;\n \ my ($tmp);\n $n++;\n $tmp=\"tmp4seq2RNApl\ fold_tclib.$$.$n.pep\";\n open (RF, \">$tmp\");\ \n print (RF \">$name\\n$seq\\n\");\n close \ (RF);\n \n system \"t_coffee -other_pg RNApl\ fold2tclib.pl -in=$tmp -out=$tclib\";\n \n u\ nlink ($tmp);\n return $tclib;\n }\n \n \ \nsub read_fasta_seq \n {\n my $f=@_[0];\n \ my %hseq;\n my (@seq, @com, @name);\n my ($a\ , $s,$nseq);\n\n open (F, $f);\n while ()\ \n {\n $s.=$_;\n }\n close (F);\n\n \ \n @name=($s=~/>(\\S*).*\\n[^>]*/g);\n \n \ @seq =($s=~/>.*.*\\n([^>]*)/g);\n @com =($s=\ ~/>\\S*(.*)\\n([^>]*)/g);\n\n \n $nseq=$#nam\ e+1;\n \n for ($a=0; $a<$nseq; $a++)\n \ {\n my $n=$name[$a];\n $hseq{$n}{name}=$n;\n $hseq\ {$n}{seq}=$seq[$a];\n $hseq{$n}{com}=$com[$a];\n \ }\n return %hseq;\n }\n","use Getopt::Long\ ;\nGetOptions(\"-in=s\" => \\$fmsq1, \"-out=s\" =>\ \\$outfile, \"-arch=s\" => \\$arch,\"-psv=s\" => \ \\$psv, \"-hmmtop_home=s\", \\$hmmtop_home );\nope\ n (O, \">$outfile\");\n\nif (!$hmmtop_home){$hmmto\ p_home=\"/home/notredame/packages/hmmtop/hmmtop_2.\ 1\";}\nif ($arch){$ENV{'HMMTOP_ARCH'}=$arch;}\nels\ e {$ENV{'HMMTOP_ARCH'}=\"$hmmtop_home/hmmtop.arch\\ ";}\n\nif ($psv){$ENV{'HMMTOP_PSV'}=$psv;}\nelse{$\ ENV{'HMMTOP_PSV'}=\"$hmmtop_home/hmmtop.psv\";}\n\\ n$fmsq=\"seq2convert.$$.tmp\";\nsystem (\"t_coffee\ -other_pg seq_reformat -in $fmsq1 -output fasta_s\ eq > $fmsq\");\n%seq=read_fasta_seq($fmsq);\n\n$tm\ pfile=\"fasta_seq2hmmtop_fasta.$$.tmp\";\nforeach \ $s (keys (%seq))\n {\n \n open F, \">$tmpfi\ le\";\n print F \">seq\\n$seq{$s}{seq}\\n\";\n \ close F;\n\n $result=`hmmtop -if=$tmpfile -s\ f=FAS -pl 2>/dev/null`;\n @r=($result=~/(.+)/g)\ ;\n foreach $l (@r)\n {\n \n if ($l=~/pred\ (.*)/)\n {$p.=$1;}\n }\n \n $p=~s/\\s\ //g;\n print O \">$seq{$s}{name}\\n$p\\n\";\n \ $p=\"\";\n }\nunlink \"$tmpfile\";\nunlink \"$f\ msq\";\nclose (O);\n\nsub read_fasta_seq \n {\n \ my $f=$_[0];\n my %hseq;\n my (@seq, @com,\ @name);\n my ($a, $s,$nseq);\n\n open (F, $\ f);\n while ()\n {\n $s.=$_;\n }\n\ close (F);\n\n \n @name=($s=~/>(.*).*\\n\ [^>]*/g);\n \n @seq =($s=~/>.*.*\\n([^>]*)/g\ );\n @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n\n \ $nseq=$#name+1;\n \n \n for ($a=0; $a<$nse\ q; $a++)\n {\n my $n=$name[$a];\n my $s;\n $h\ seq{$n}{name}=$n;\n $s=$seq[$a];$s=~s/\\s//g;\n \n\ $hseq{$n}{seq}=$s;\n $hseq{$n}{com}=$com[$a];\n \ }\n return %hseq;\n }\n","\n\n\n\n\nmy $FM\ ODEL =\"\"; \nmy $TMPDIR = \"/tmp\";\n\n\n\n\nmy $\ NUCALPH = \"ACGTUNRYMKSWHBVD\";\nmy $PRIMNUCALPH =\ \"ACGTUN\";\nuse vars qw($NUCALPH $PRIMNUCALPH $T\ MPDIR);\n\n\nmy $errmsg;\nuse vars qw($errmsg);\n\\ n\n\nuse Getopt::Long;\nuse Cwd;\nuse File::Basena\ me;\nuse File::Temp qw/ tempfile tempdir /;\nuse F\ ile::Copy;\nuse File::Path;\n\n\n\nsub usage(;$)\n\ {\n my ($errmsg) = @_;\n my $myname = basena\ me($0);\n\n if ($errmsg) {\n print STDER\ R \"ERROR: $errmsg\\n\";\n }\n\n print STDER\ R << \"EOF\";\n \n$myname: align two sequences \ by means of consan\\'s sfold\nUsage:\n $myname -i \ file -o file -d path\nOptions:\n -i|--in : pairwis\ e input sequence file\n -o|--out: output alignment\ \n -d|--directory containing data\n\nEOF\n}\n\nsub\ read_stk_aln \n {\n my $f=$_[0];\n my ($se\ q, $id);\n \n my %hseq;\n\n open (STK, \"\ $f\");\n while ()\n {\n if ( /^#/ || \ /^\\/\\// || /^\\s*$/){;}\n else\n {\n ($id,\ $seq)=/(\\S+)\\s+(\\S+)/;\n $hseq{$id}{'seq'}.\ =$seq;\n }\n }\n close (STK);\n retur\ n %hseq;\n }\nsub read_fasta_seq \n {\n my $f\ =$_[0];\n my %hseq;\n my (@seq, @com, @name)\ ;\n my ($a, $s,$nseq);\n\n open (F, $f);\n \ while ()\n {\n $s.=$_;\n }\n clo\ se (F);\n\n \n @name=($s=~/>(.*).*\\n[^>]*/g\ );\n \n @seq =($s=~/>.*.*\\n([^>]*)/g);\n \ @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n \n $n\ seq=$#name+1;\n \n for ($a=0; $a<$nseq; $a++\ )\n {\n my $n=$name[$a];\n $hseq{$n}{name}=$n\ ;\n $hseq{$n}{seq}=$seq[$a];\n $hseq{$n}{com}=$com\ [$a];\n }\n return %hseq;\n }\n\n\n\nsub \ sfold_parseoutput($$)\n{\n my ($frawout, $foutf\ a) = @_;\n my %haln;\n my ($fstk, $cmd, $id)\ ;\n open FOUTFA, \">$foutfa\";\n \n $fstk\ = $frawout . \".stk\";\n \n # first line of\ raw out contains info\n # remaining stuff is s\ tockholm formatted\n $cmd = \"sed -e '1d' $fraw\ out\";\n system(\"$cmd > $fstk\");\n if ($? \ != 0) {\n $errmsg = \"command failed with e\ xit status $?.\";\n $errmsg .= \"Command w\ as \\\"$cmd\\\"\";\n return -1;\n }\n\n \ # this gives an error message. just ignore it..\ .\n %haln=read_stk_aln ( $fstk);\n foreach $\ i (keys (%haln))\n {\n my $s;\n $s=$haln{$i}{\ 'seq'};\n $s =~ s/\\./-/g;\n print FOUTFA \">$i\\n\ $s\\n\";\n }\n close FOUTFA;\n return 0\ ;\n}\n\n\n\n\nsub sfold_wrapper($$$$)\n{\n \n \ my ($fs1, $fs2, $fmodel, $foutfa) = @_;\n \n\\ n my ($cmd, $frawout, $ferrlog, $freadme, $ftim\ elog, $fstk);\n\n # add basename($fmsqin) (unk\ nown here!)\n $frawout = \"sfold.log\";\n $f\ errlog = \"sfold.err\";\n $ftimelog = \"sfold.t\ ime\";\n $freadme = \"sfold.README\";\n $fs\ tk = \"sfold.stk\";\n \n # prepare execution\ ...\n #\n # ./tmp is essential for dswpalign\ \n # otherwise you'll get a segfault\n mkdir\ \"./tmp\";\n \n $cmd = \"sfold -m $fmodel $\ fs1 $fs2\";\n open(FREADME,\">$freadme\");\n \ print FREADME \"$cmd\\n\"; \n close(FREADME);\\ n\n # and go\n #\n system(\"/usr/bin/time\ -p -o $ftimelog $cmd >$frawout 2>$ferrlog\");\n \ if ($? != 0) {\n $errmsg = \"command fail\ ed with exit status $?\";\n $errmsg .= \"co\ mmand was \\\"$cmd\\\". See \" . getcwd . \"\\n\";\ \n return -1;\n }\n\n return sfold_pa\ rseoutput($frawout, $foutfa);\n}\n\n\n\n\n\n\n\nmy\ ($help, $fmsqin, $fmsaout);\nGetOptions(\"help\" \ => \\$help,\n \"in=s\" => \\$fmsqin,\n \ \"out=s\" => \\$fmsaout,\n \"data=s\"\ => \\$ref_dir);\n\n\n\nif ($help) {\n usage();\ \n exit(0);\n}\nif (! defined($fmsqin)) {\n \ usage('missing input filename');\n exit(1);\n}\\ nif (! defined($fmsaout)) {\n usage('missing ou\ tput filename');\n exit(1);\n\n}\nif (scalar(@A\ RGV)) {\n usage('Unknown remaining args');\n \ exit(1);\n}\n\n$FMODEL = \"$ref_dir/mix80.mod\";\\ nif (! -e \"$FMODEL\") {\n die(\"couldn't find \ sfold grammar model file. Expected $FMODEL\\n\");\\ n}\n\n\nmy %hseq=read_fasta_seq ($fmsqin);\nmy $id\ ;\n\nforeach $id (keys(%hseq))\n {\n push(@seq\ _array, $hseq{$id});\n }\n\nif ( scalar(@seq_arra\ y) != 2 ) {\n die(\"Need *exactly* two sequence\ s as input (pairwise alignment!).\")\n}\n\n\n\nmy \ ($sec, $min, $hour, $mday, $mon, $year, $wday, $yd\ ay, $isdst) = localtime(time);\nmy $datei = sprint\ f(\"%4d-%02d-%02d\", $year+1900, $mon+1, $mday);\n\ my $templ = basename($0) . \".\" . $datei . \".pid\ -\" . $$ . \".XXXXXX\";\nmy $wd = tempdir ( $templ\ , DIR => $TMPDIR);\n\ncopy($fmsqin, \"$wd/\" . bas\ ename($fmsqin) . \".org\"); # for reproduction\nco\ py($FMODEL, \"$wd\");\nmy $fmodel = basename($FMOD\ EL);\nmy $orgwd = getcwd;\nchdir $wd;\n\n\n\nmy @s\ epseqfiles;\nforeach $id (keys(%hseq)) {\n my (\ $seq, $orgseq, $fname, $sout);\n $seq=$hseq{$id\ }{'seq'};\n \n $fname = basename($fmsqin) . \ \"_$id.fa\";\n # replace funnies in file/id nam\ e (e.g. \"/\" \" \" etc)\n $fname =~ s,[/ ],_,g\ ;\n open (PF, \">$fname\");\n print (PF \">$\ id\\n$seq\\n\");\n close (PF);\n\n push(@sep\ seqfiles, $fname);\n}\n\nmy ($f1, $f2, $fout);\n$f\ 1 = $sepseqfiles[0];\n$f2 = $sepseqfiles[1];\n$fou\ t = $wd . basename($fmsqin) . \".out.fa\";\nif (sf\ old_wrapper($f1, $f2, $fmodel, \"$fout\") != 0) {\\ n printf STDERR \"ERROR: See logs in $wd\\n\";\\ n exit(1);\n} else {\n chdir $orgwd;\n co\ py($fout, $fmsaout);\n rmtree($wd);\n exit(0)\ ;\n}\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nu\ se Env qw(USER);\n\n\n$tmp=clean_cr ($ARGV[0]);\no\ pen (F, $tmp);\n\nwhile ( )\n {\n my $l=$_;\ \n if ( $l=~/^# STOCKHOLM/){$stockholm=1;}\n \ elsif ( $stockholm && $l=~/^#/)\n {\n $l=~/^\ #(\\S+)\\s+(\\S+)\\s+(\\S*)/g;\n $l=\"_stockholmha\ sch_$1\\_stockholmspace_$2 $3\\n\";\n }\n \ $file.=$l;\n }\nclose (F);\nunlink($tmp);\n$file1\ =$file;\n\n$file=~s/\\#/_hash_symbol_/g;\n$file=~s\ /\\@/_arobase_symbol_/g;\n\n\n$file=~s/\\n[\\.:*\\\ s]+\\n/\\n\\n/g;\n\n$file=~s/\\n[ \\t\\r\\f]+(\\b)\ /\\n\\1/g;\n\n\n$file=~s/(\\n\\S+)(\\s+)(\\S)/\\1_\ blank_\\3/g;\n\n$file=~s/[ ]//g;\n$file=~s/_blank_\ / /g;\n\n\n\n$file =~s/\\n\\s*\\n/#/g;\n\n$file.=\\ "#\";\n$file =~s/\\n/@/g;\n\n\n\n\n@blocks=split /\ \\#/, $file;\nshift (@blocks);\n@s=split /\\@/, $b\ locks[0];\n$nseq=$#s+1;\n\n\n\n$file=join '@', @bl\ ocks;\n@lines=split /\\@/,$file;\n\n$c=0;\n\nforea\ ch $l (@lines)\n {\n if (!($l=~/\\S/)){next;}\\ n elsif ($stockholm && ($l=~/^\\/\\// || $l=~/S\ TOCKHOLM/)){next;}#get read of STOCHOLM Terminator\ \n \n $l=~/(\\S+)\\s+(\\S*)/g;\n $n=$1; $s\ =$2;\n \n $seq[$c].=$s;\n $name[$c]=$n;\n\ $c++;\n \n if ( $c==$nseq){$c=0;}\n \\ n } \n\nif ( $c!=0)\n {\n print STDERR \"ERR\ OR: $ARGV[0] is NOT an MSA in Clustalw format: mak\ e sure there is no blank line within a block [ERRO\ R]\\n\";\n exit (EXIT_FAILURE);\n }\n\nfor ($\ a=0; $a< $nseq; $a++)\n {\n $name[$a]=cleanstr\ ing ($name[$a]);\n $seq[$a]=cleanstring ($seq[$\ a]);\n $seq[$a]=breakstring($seq[$a], 60);\n \ \n $line=\">$name[$a]\\n$seq[$a]\\n\";\n \n\ print \"$line\";\n }\nexit (EXIT_SUCCESS);\n\\ nsub cleanstring\n {\n my $s=@_[0];\n $s=~s\ /_hash_symbol_/\\#/g;\n $s=~s/_arobase_symbol_/\ \\@/g;\n $s=~s/[ \\t]//g;\n return $s;\n }\\ nsub breakstring\n {\n my $s=@_[0];\n my $s\ ize=@_[1];\n my @list;\n my $n,$ns, $symbol;\ \n \n @list=split //,$s;\n $n=0;$ns=\"\";\ \n foreach $symbol (@list)\n {\n if ( $n==\ $size)\n {\n $ns.=\"\\n\";\n $n=0;\n }\ \n $ns.=$symbol;\n $n++;\n }\n return $ns;\ \n }\n\nsub clean_cr\n {\n my $f=@_[0];\n \ my $file;\n \n $tmp=\"f$.$$\";\n \n \ \n open (IN, $f);\n open (OUT, \">$tmp\");\n\ \n while ( )\n {\n $file=$_;\n $fi\ le=~s/\\r\\n/\\n/g;\n $file=~s/\\n\\r/\\n/g;\n $fi\ le=~s/\\r\\r/\\n/g;\n $file=~s/\\r/\\n/g;\n print \ OUT \"$file\";\n }\n \n close (IN);\n \ close (OUT);\n return $tmp;\n }\n","use Env \ qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n\\ n\n$query_start=-1;\n$query_end=-1;\n\nwhile (<>)\\ n {\n if ( /\\/\\//){$in_aln=1;}\n elsif ( \ $in_aln && /(\\S+)\\s+(.*)/)\n {\n\n\n $name=\ $1;\n \n\n $seq=$2;\n $seq=~s/\\s//g;\n $se\ q=~s/\\~/\\-/g;\n $seq=~s/\\./\\-/g;\n if ( $list{\ $n}{'name'} && $list{$n}{'name'} ne $name)\n {\n\ print \"$list{$n}{'name'} Vs $name\";\n \\ n exit (EXIT_FAILURE);\n }\n else\n {\n \ $list{$n}{'name'}= $name;\n }\n\n $list{$n}{'s\ eq'}=$list{$n}{'seq'}.$seq;\n \n $nseq=++$n;\n \n \ }\n else\n {$n=0;}\n }\n\n\nfor ($a=\ 0; $a<$nseq; $a++)\n {\n print \">$list{$a}{'n\ ame'}\\n$list{$a}{'seq'}\\n\";\n }\n \n","\n\ use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(U\ SER);\n\n \ \nuse strict; \ \nuse warnings;\nuse diagno\ stics;\n\nmy $in_hit_list, my $in_aln=0, my(%name_\ list)=(),my (%list)=(),my $n_seq=0; my $test=0;\nm\ y($j)=0, my $n=0, my $nom, my $lg_query, my %vu=()\ ;\n\nopen (F, \">tmp\");\n\n$/=\"\\n\";\nwhile (<>\ )\n{\n print F $_;\n if($_ =~ /Query=\\s*(.+\ ?)\\s/i) { $nom=$1;}\n\n if ( /Sequences produc\ ing significant alignments/){$in_hit_list=1;}\n \ \n if ($_=~ /^pdb\\|/i) { $_=~ s/pdb\\|//g; }\\ n if ($_=~ /^(1_\\d+)\\s+\\d+/) { $_=~ s/$1/QUE\ RY/;}\n \n if ( /^(\\S+).+?\\s+[\\d.]+\\s+\ ([\\de.-]+)\\s+$/ && $in_hit_list) \n {\n my($i\ d)=$1; # \n $id=~ s/\\|/_/g; #\n if ($id =~ /.+_$/\ ) { chop($id) }; #\n $name_list{$n_seq++}=$id;\n $\ name_list{$n_seq-1}=~ s/.*\\|//g; \n }\n \\ n if (/query/i) {$in_aln=1;}\n if ( /^(\\S+)\ \\s+(\\d+)\\s+([a-zA-Z-]+)\\s+(\\d+)/ || /^(\\S+)(\ \\s+)(\\-+)(\\s+)/ && ($in_aln == 1))\n {\n my \ $name=$1;\n my $start=$2;\n my $seq=$3;\n my $end=\ $4;\n \n if ($name =~ /QUERY/i) { $lg_query=lengt\ h($seq); }\n\n unless ($test > $n) #m\n {\n my\ (@seqq)= split('',$seq);\n my($gap_missing)= s\ calar(@seqq);\n \n while ($gap_missing != \ $lg_query) { unshift (@seqq,\"-\"); $gap_missing=\ scalar(@seqq); }\n $seq=join('',@seqq); #m\n\ }\n \n if ($name =~ /QUERY/i)\n {\n $n=0; %vu\ =(); $j=0;\n $list{$n}{'real_name'}=\"$nom\";\\ n } \n else\n {\n unless (exists $vu{$name}) {\ ++$j;} \n $list{$n}{'real_name'}=$name_list{$\ j-1};\n }\n \n $list{$n}{'name'}=$name;\n\n $seq=\ ~tr/a-z/A-Z/;\n $list{$n}{'seq'}=$list{$n}{'seq'};\ \n $list{$n}{'seq'}.=$seq;\n\n $n++;\n $vu{$name}+\ +;\n $test++;\n } \n \n}\n\nmy @numero=();\n\\ nfor (my $a=0; $a<$n; $a++) #m\n{\n my $long=le\ ngth($list{0}{'seq'}); \n my $long1= length($l\ ist{$a}{'seq'});\n \n while ($long1 ne $long)\\ n {\n $list{$a}{'seq'}.=\"-\";\n $long1= length\ ($list{$a}{'seq'});\n } \n \n push (@numero\ ,\"$list{$a}{'name'} $list{$a}{'real_name'}\\n\");\ \n}\n\nmy %dejavu=();\n\n\nfor (my $i=0; $i<=$#num\ ero; $i++)\n{\n my $s=\">$list{$i}{'real_name'}\ \\n$list{$i}{'seq'}\\n\";\n my $k=0;\n \n \ if (exists $dejavu{$numero[$i]}) {next;}\n els\ e\n { \n for ($j=0; $j<$n ; $j++)\n {\n if \ (\"$numero[$i]\" eq \"$numero[$j]\" && $j != $i )\\ n {\n ++$k;\n $s .=\">$list{$j}{'real_name'}\ \\n$list{$j}{'seq'}\\n\";\n }\n } \n }\n \ \n if ($k>0) \n {\n my $cons;\n open (SOR,\\ ">tempo_aln2cons\"); print SOR $s; close SOR ;\n \ open (COM,\"t_coffee -other_pg seq_reformat -in te\ mpo_aln2cons -action +aln2cons +upper |\") ; \n \ while ()\n { \n if (/^>/) { $cons =\">\ $list{$i}{'real_name'}\\n\"; next;}\n $_=~ s/\\ \n//g;\n $cons .=$_;\n }\n close COM; unlink (\ \"tempo_aln2cons\");\n print $cons,\"\\n\"; print \ F $cons,\"\\n\";\n } \n else { print $s; p\ rint F $s; }\n \n $dejavu{$numero[$i]}++;\n}\ #m\n\nexit;\n\n\n\n\n\n\n\n\n\n\n\n","use Env;\n\\ n\n$tmp_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_\ generic_method.pl\";\n\n$blast=@ARGV[0];\n\n$name=\ \"query\";$seq=\"\";\n%p=blast_xml2profile($name,$\ seq,100, 0, 0, $blast);\n&output_profile (%p);\n\n\ \nsub output_profile\n {\n my (%profile)=(@_);\ \n my ($a);\n for ($a=0; $a<$profile{n}; $a+\ +)\n {\n \n print \">$profile{$a}{name} $prof\ ile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n \ }\n return;\n }\nsub file_contains \n {\n \ my ($file, $tag, $max)=(@_);\n my ($n);\n $n\ =0;\n \n if ( !-e $file && ($file =~/$tag/))\ {return 1;}\n elsif ( !-e $file){return 0;}\n \ else \n {\n open (FC, \"$file\");\n while \ ( )\n {\n if ( ($_=~/$tag/))\n {\n\ close (FC);\n return 1;\n }\n elsif (\ $max && $n>$max)\n {\n close (FC);\n retur\ n 0;\n }\n $n++;\n }\n }\n clo\ se (FC);\n return 0;\n }\n \n \nsub file\ 2string\n {\n my $f=@_[0];\n my $string, $l\ ;\n open (F,\"$f\");\n while ()\n {\\ n\n $l=$_;\n #chomp ($l);\n $string.=$l;\n }\\ n close (F);\n $string=~s/\\r\\n//g;\n $s\ tring=~s/\\n//g;\n return $string;\n }\n\n\n\n\ sub tag2value \n {\n \n my $tag=(@_[0]);\n \ my $word=(@_[1]);\n my $return;\n \n $\ tag=~/$word=\"([^\"]+)\"/;\n $return=$1;\n r\ eturn $return;\n }\n \nsub hit_tag2pdbid\n \ {\n my $tag=(@_[0]);\n my $pdbid;\n \n\ $tag=~/id=\"(\\S+)\"/;\n $pdbid=$1;\n $p\ dbid=~s/_//;\n return $pdbid;\n }\nsub id2pdbi\ d \n {\n my $id=@_[0];\n \n if ($id =~/pdb\ /)\n {\n $id=~/pdb(.*)/;\n $id=$1;\n }\n\ $id=~s/[|¦_]//g;\n return $id;\n }\nsub se\ t_blast_type \n {\n my $file =@_[0];\n if (\ &file_contains ($file,\"EBIApplicationResult\",100\ )){$BLAST_TYPE=\"EBI\";}\n elsif (&file_contain\ s ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TYPE=\\ "NCBI\";}\n else\n {\n $BLAST_TYPE=\"\";\n\ }\n return $BLAST_TYPE;\n }\nsub blast_x\ ml2profile \n {\n my ($name,$seq,$maxid, $mini\ d, $mincov, $file)=(@_);\n my (%p, $a, $string,\ $n);\n \n\n\n if ($BLAST_TYPE eq \"EBI\" ||\ &file_contains ($file,\"EBIApplicationResult\",10\ 0)){%p=ebi_blast_xml2profile(@_);}\n elsif ($BL\ AST_TYPE eq \"NCBI\" || &file_contains ($file,\"NC\ BI_BlastOutput\",100)){%p=ncbi_blast_xml2profile(@\ _);}\n else \n {\n print \"************ ER\ ROR: Blast Returned an unknown XML Format ********\ **************\";\n die;\n }\n for ($a=0; \ $a<$p{n}; $a++)\n {\n my $name=$p{$a}{name};\\ n $p{$name}{seq}=$p{$a}{seq};\n }\n return\ %p;\n }\nsub ncbi_blast_xml2profile \n {\n m\ y ($name,$seq,$maxid, $minid, $mincov, $string)=(@\ _);\n my ($L,$l, $a,$b,$c,$d,$nhits,@identifyer\ L);\n \n \n $seq=~s/[^a-zA-Z]//g;\n $L\ =length ($seq);\n \n %hit=&xml2tag_list ($st\ ring, \"Hit\");\n \n \n for ($nhits=0,$a=\ 0; $a<$hit{n}; $a++)\n {\n my ($ldb,$id, $ide\ ntity, $expectation, $start, $end, $coverage, $r);\ \n my (%ID,%DE,%HSP);\n \n $ldb=\"\";\n\n %ID=&xml\ 2tag_list ($hit{$a}{body}, \"Hit_id\");\n $identif\ yer=$ID{0}{body};\n \n %DE=&xml2tag_list ($hit{$a}\ {body}, \"Hit_def\");\n $definition=$DE{0}{body};\\ n \n %HSP=&xml2tag_list ($hit{$a}{body}, \"Hsp\");\ \n for ($b=0; $b<$HSP{n}; $b++)\n {\n my (%S\ TART,%END,%E,%I,%Q,%M);\n\n \n %START=&xml2ta\ g_list ($HSP{$b}{body}, \"Hsp_query-from\");\n \ %HSTART=&xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-\ from\");\n \n %LEN= &xml2tag_list ($HSP{$\ b}{body}, \"Hsp_align-len\");\n %END= &xml2ta\ g_list ($HSP{$b}{body}, \"Hsp_query-to\");\n %\ HEND= &xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-to\ \");\n %E=&xml2tag_list ($HSP{$b}{body}, \\ "Hsp_evalue\");\n %I=&xml2tag_list ($HSP{$\ b}{body}, \"Hsp_identity\");\n %Q=&xml2tag_lis\ t ($HSP{$b}{body}, \"Hsp_qseq\");\n %M=&xm\ l2tag_list ($HSP{$b}{body}, \"Hsp_hseq\");\n \ \n for ($e=0; $e<$Q{n}; $e++)\n\n {\n\ $qs=$Q{$e}{body};\n $ms=$M{$e}{body};\n if ($s\ eq eq\"\"){$seq=$qs;$L=length($seq);}\n \n $expe\ ctation=$E{$e}{body};\n $identity=($LEN{$e}{body}\ ==0)?0:$I{$e}{body}/$LEN{$e}{body}*100;\n $start=\ $START{$e}{body};\n $end=$END{$e}{body};\n $Hsta\ rt=$HSTART{$e}{body};\n $Hend=$HEND{$e}{body};\n \ \n $coverage=(($end-$start)*100)/$L;\n\n \n if (\ $identity>$maxid || $identity<$minid || $coverage<\ $mincov){next;}\n @lr1=(split (//,$qs));\n @lr2=\ (split (//,$ms));\n $l=$#lr1+1;\n for ($c=0;$c<$\ L;$c++){$p[$nhits][$c]=\"-\";}\n for ($d=0,$c=0; \ $c<$l; $c++)\n {\n $r=$lr1[$c];\n if \ ( $r=~/[A-Za-z]/)\n {\n \n $p[$nhits][$\ d + $start-1]=$lr2[$c];\n $d++;\n }\n \ }\n $Qseq[$nhits]=$qs;\n $Hseq[$nhits]=$ms;\n $\ QstartL[$nhits]=$start;\n $HstartL[$nhits]=$Hstar\ t;\n $identityL[$nhits]=$identity;\n $endL[$nhit\ s]=$end;\n $definitionL[$nhits]=$definition;\n $\ identifyerL[$nhits]=$identifyer;\n $comment[$nhit\ s]=\"$ldb|$identifyer [Eval=$expectation][id=$iden\ tity%][start=$Hstart end=$Hend]\";\n $nhits++;\n \ }\n }\n }\n \n $profile{n}=0;\n\ $profile{$profile{n}}{name}=$name;\n $profi\ le{$profile{n}}{seq}=$seq;\n $profile {n}++;\n \ \n for ($a=0; $a<$nhits; $a++)\n {\n $n\ =$a+1;\n \n $profile{$n}{name}=\"$name\\_$a\";\n $\ profile{$n}{seq}=\"\";\n $profile{$n}{Qseq}=$Qseq[\ $a];\n $profile{$n}{Hseq}=$Hseq[$a];\n $profile{$n\ }{Qstart}=$QstartL[$a];\n $profile{$n}{Hstart}=$Hs\ tartL[$a];\n $profile{$n}{identity}=$identityL[$a]\ ;\n $profile{$n}{definition}=$definitionL[$a];\n $\ profile{$n}{identifyer}=$identifyerL[$a];\n $profi\ le{$n}{comment}=$comment[$a];\n for ($b=0; $b<$L; \ $b++)\n {\n if ($p[$a][$b])\n {\n $pr\ ofile{$n}{seq}.=$p[$a][$b];\n }\n else\n\ {\n $profile{$n}{seq}.=\"-\";\n }\n \ }\n }\n \n $profile{n}=$nhits+1;\n \ return %profile;\n }\nsub ebi_blast_xml2profile \ \n {\n my ($name,$seq,$maxid, $minid, $mincov,\ $string)=(@_);\n my ($L,$l, $a,$b,$c,$d,$nhits\ ,@identifyerL,$identifyer);\n \n\n \n $se\ q=~s/[^a-zA-Z]//g;\n $L=length ($seq);\n %hi\ t=&xml2tag_list ($string, \"hit\");\n \n for\ ($nhits=0,$a=0; $a<$hit{n}; $a++)\n {\n my (\ $ldb,$id, $identity, $expectation, $start, $end, $\ coverage, $r);\n my (%Q,%M,%E,%I);\n \n $ldb=&tag2\ value ($hit{$a}{open}, \"database\");\n $identifye\ r=&tag2value ($hit{$a}{open}, \"id\");\n\n $descri\ ption=&tag2value ($hit{$a}{open}, \"description\")\ ;\n \n %Q=&xml2tag_list ($hit{$a}{body}, \"querySe\ q\");\n %M=&xml2tag_list ($hit{$a}{body}, \"matchS\ eq\");\n %E=&xml2tag_list ($hit{$a}{body}, \"expec\ tation\");\n %I=&xml2tag_list ($hit{$a}{body}, \"i\ dentity\");\n \n\n for ($b=0; $b<$Q{n}; $b++)\n \ {\n \n \n $qs=$Q{$b}{body};\n $ms=\ $M{$b}{body};\n if ($seq eq\"\"){$seq=$qs;$L=l\ ength($seq);}\n\n $expectation=$E{$b}{body};\n\ $identity=$I{$b}{body};\n \n \n \ $start=&tag2value ($Q{$b}{open}, \"start\");\n\ $end=&tag2value ($Q{$b}{open}, \"end\");\n \ $startM=&tag2value ($M{$b}{open}, \"start\");\n \ $endM=&tag2value ($M{$b}{open}, \"end\");\n \ $coverage=(($end-$start)*100)/$L;\n \n # \ print \"$id: ID: $identity COV: $coverage [$start \ $end]\\n\";\n \n \n if ($identity>$max\ id || $identity<$minid || $coverage<$mincov){next;\ }\n # print \"KEEP\\n\";\n\n \n @lr1=(\ split (//,$qs));\n @lr2=(split (//,$ms));\n \ $l=$#lr1+1;\n for ($c=0;$c<$L;$c++){$p[$nhit\ s][$c]=\"-\";}\n for ($d=0,$c=0; $c<$l; $c++)\\ n {\n $r=$lr1[$c];\n if ( $r=~/[A-Za-z]/)\\ n {\n \n $p[$nhits][$d + $start-1]=$l\ r2[$c];\n $d++;\n }\n }\n \n \\ n $identifyerL[$nhits]=$identifyer;\n $com\ ment[$nhits]=\"$ldb|$identifyer [Eval=$expectation\ ][id=$identity%][start=$startM end=$endM]\";\n \ $nhits++;\n }\n }\n \n $profile{n}=0\ ;\n $profile{$profile{n}}{name}=$name;\n $pr\ ofile{$profile{n}}{seq}=$seq;\n $profile {n}++;\ \n \n for ($a=0; $a<$nhits; $a++)\n {\n\ $n=$a+1;\n $profile{$n}{name}=\"$name\\_$a\";\n $\ profile{$n}{seq}=\"\";\n $profile{$n}{identifyer}=\ $identifyerL[$a];\n \n $profile{$n}{comment}=$comm\ ent[$a];\n for ($b=0; $b<$L; $b++)\n {\n if \ ($p[$a][$b])\n {\n $profile{$n}{seq}.=$p[$a\ ][$b];\n }\n else\n {\n $profile{\ $n}{seq}.=\"-\";\n }\n }\n }\n $pr\ ofile{n}=$nhits+1;\n \n return %profile;\n \ }\n\nsub blast_xml2hit_list\n {\n my $string=(\ @_[0]);\n return &xml2tag_list ($string, \"hit\\ ");\n }\nsub xml2tag_list \n {\n my ($string\ _in,$tag)=@_;\n my $tag_in, $tag_out;\n my %\ tag;\n \n if (-e $string_in)\n {\n $str\ ing=&file2string ($string_in);\n }\n else\\ n {\n $string=$string_in;\n }\n $tag_\ in1=\"<$tag \";\n $tag_in2=\"<$tag>\";\n $ta\ g_out=\"/$tag>\";\n $string=~s/>/>##1/g;\n $\ string=~s//g;\n @l=($string=~/(\\<[^>]+\ \\>)/g);\n $tag{n}=0;\n $in=0;$n=-1;\n \n \\ n\n foreach $t (@l)\n {\n\n $t=~s/<#//;\n \ $t=~s/#>//;\n \n if ( $t=~/$tag_in1/ || $t=~/$tag_\ in2/)\n {\n \n $in=1;\n $tag{$tag{n}}{o\ pen}=$t;\n $n++;\n \n }\n elsif ($t=~/$t\ ag_out/)\n {\n \n\n $tag{$tag{n}}{close}\ =$t;\n $tag{n}++;\n $in=0;\n }\n elsif (\ $in)\n {\n \n $tag{$tag{n}}{body}.=$t;\n \ }\n }\n \n return %tag;\n }\n\n\n\n\n"\ ,"use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw\ (USER);\nwhile (<>)\n {\n if ( /^>(\\S+)/)\n \ {\n if ($list{$1})\n {\n print \">$1_$li\ st{$1}\\n\";\n $list{$1}++;\n }\n else\n {\ \n print $_;\n $list{$1}=1;\n }\n }\ \n else\n {\n print $_;\n }\n }\n \ \n","\n\n\nuse Env qw(HOST);\nuse Env qw(HOME);\ \nuse Env qw(USER);\n\n\nopen (F,$ARGV[0]);\nwhile\ ( <>)\n {\n @x=/([^:,;\\)\\(\\s]+):[^:,;\\)\\\ (]*/g;\n @list=(@list,@x);\n }\n$n=$#list+1;\n\ foreach $n(@list){print \">$n\\nsequence\\n\";}\n\\ n\nclose (F);\n","\nopen (F, $ARGV[0]);\n\nwhile (\ )\n {\n @l=($_=~/(\\S+)/g);\n \n $na\ me=shift @l;\n \n print STDOUT \"\\n>$name\\\ n\";\n foreach $e (@l){$e=($e eq \"0\")?\"O\":\\ "I\";print \"$e\";}\n }\nclose (F);\n\n \\ n \n","use Env qw(HOST);\nuse Env qw(HOME);\nus\ e Env qw(USER);\n\n$tmp=\"$ARGV[0].$$\";\nopen (IN\ , $ARGV[0]);\nopen (OUT, \">$tmp\");\n\nwhile ( )\n {\n $file=$_;\n $file=~s/\\r\\n/\\n/g\ ;\n $file=~s/\\n\\r/\\n/g;\n $file=~s/\\r\\r\ /\\n/g;\n $file=~s/\\r/\\n/g;\n print OUT \"\ $file\";\n }\nclose (IN);\nclose (OUT);\n\nopen (\ OUT, \">$ARGV[0]\");\nopen (IN, \"$tmp\");\n\nwhil\ e ( )\n{\n print OUT \"$_\";\n}\nclose (IN);\\ nclose (OUT);\nunlink ($tmp);\n\n"}; /*********************************COPYRIGHT NOTICE**********************************/ /*© Centro de Regulacio Genomica */ /*and */ /*Cedric Notredame */ /*Tue Oct 27 10:12:26 WEST 2009. */ /*All rights reserved.*/ /*This file is part of T-COFFEE.*/ /**/ /* T-COFFEE is free software; you can redistribute it and/or modify*/ /* it under the terms of the GNU General Public License as published by*/ /* the Free Software Foundation; either version 2 of the License, or*/ /* (at your option) any later version.*/ /**/ /* T-COFFEE is distributed in the hope that it will be useful,*/ /* but WITHOUT ANY WARRANTY; without even the implied warranty of*/ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the*/ /* GNU General Public License for more details.*/ /**/ /* You should have received a copy of the GNU General Public License*/ /* along with Foobar; if not, write to the Free Software*/ /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/ /*............................................... |*/ /* If you need some more information*/ /* cedric.notredame@europe.com*/ /*............................................... |*/ /**/ /**/ /* */ /*********************************COPYRIGHT NOTICE**********************************/