JWS-117 Compiled all tools with ./compilebin.sh and some were missing related files.
[jabaws.git] / binaries / src / tcoffee / t_coffee_source / reformat.c
diff --git a/binaries/src/tcoffee/t_coffee_source/reformat.c b/binaries/src/tcoffee/t_coffee_source/reformat.c
deleted file mode 100644 (file)
index 2eac04a..0000000
+++ /dev/null
@@ -1,12795 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include "io_lib_header.h"
-#include "util_lib_header.h"
-#include "dp_lib_header.h" 
-#include "define_header.h"
-#include "dev1_lib_header.h"  //JM_STRAT
-
-#define ACTION(x) ((n_actions>=(x+1))?action_list[x]:NULL)
-#define ACTION2(x,y) ((n_actions>=(x+1))?action_list[x]:y)
-#define ATOI_ACTION(x) ((ACTION(x)!=NULL)?(atoi(ACTION(x))):0)
-
-/**************************************************************************************************/
-/*****************************    SEQ_REFORMAT     ******************************************/
-/**************************************************************************************************/
-int output_transitions(char *outfile, Alignment *A);
-static int output_age_matrix ( char *outfile, int val);
-int SeqGCGCheckSum(char *seq, int len);
-static Sequence *seq2year ( Sequence *S, int modulo);
-static Sequence* output_n_pavie_age_channel (Sequence *S, char *name, int n);
-static Sequence* output_pavie_age_channel (Sequence *S, char *name, int modulo);
-
-static int output_seq2struc(char *outfile, Alignment *A);
-void output_conservation_statistics ( char *file, Alignment *A);
-/**************************************************************************************************/
-/*****************************    SEQ_REFORMAT     ******************************************/
-/**************************************************************************************************/
-int seq_reformat ( int argc, char **in_argv) 
-       {
-       
-        Sequence_data_struc *D1=NULL;
-       Sequence_data_struc *D2=NULL;
-       Sequence_data_struc *D_ST=NULL;
-       Action_data_struc  *RAD;
-       
-       
-       
-       int a, b;
-       
-       char *in_format;
-       char *in2_format;
-       char *out_format;
-       char *in_file;
-       char *in2_file;
-       char *out_file;
-       char *out2_file;
-       char *struc_in_format;
-       char *struc_out_format;
-       char *struc_in_file;
-       char *struc_out_file;
-       char**action_list;
-       char **action;
-       char *rename_file;
-       char *cache;
-       char ***rename_list=NULL;
-       int code=CODE;
-       char **argv;
-       
-       int n_actions=0;
-       int print_format=0;
-       /*INITIALIZATIONS*/
-       
-       RAD=vcalloc ( 1, sizeof ( Action_data_struc));
-       RAD->keep_case=1;
-       declare_name (cache);sprintf ( cache, "use");
-       declare_name(in_file);
-       declare_name(in2_file);
-       declare_name(out_file);
-       declare_name(out2_file);
-       declare_name(struc_in_format);
-       declare_name(struc_out_format);
-       declare_name(RAD->coor_file);
-       
-       declare_name(struc_in_file);
-       declare_name(struc_out_file);
-       declare_name(in_format);
-       declare_name(in2_format);
-       declare_name(out_format);
-       declare_name(rename_file);
-       
-       
-       argv=break_list ( in_argv, &argc, "=;, \n");
-               
-       action_list=declare_char ( 100, 100);
-
-/*END INITIALIZATION*/
-
-       addrandinit ( (unsigned long) 500);
-       
-       if ( argc==1 || strm6 ( argv[1], "h", "-h", "help", "-help", "-man", "?"))
-               {
-               
-                 fprintf ( stdout, "\n%s (%s,%s,%s [%s])\n",PROGRAM, VERSION,AUTHOR, DATE, URL);
-               fprintf ( stdout, "\n***********     MINIMUM SYNTAX        *****************");
-               fprintf ( stdout, "\nseq_reformat -in <in_file> -output <out_format>");
-               fprintf ( stdout, "\nSome File formats are automatically recognised");
-               fprintf ( stdout, "\nSee Format section");
-               fprintf ( stdout, "\n");
-               fprintf ( stdout, "\n***********        MAIN FLAGS              ******************");
-               fprintf ( stdout, "\n-in     name........Name of the file read");
-               
-
-               fprintf ( stdout, "\n-input  format......Name of the format read, see Input Format Section");
-               fprintf ( stdout, "\n...................Automatic detection, except for seqs of numbers");
-               fprintf ( stdout, "\n...................-input number_aln | number_fasta");
-               fprintf ( stdout, "\n-in2    fname......Second alignment");
-               fprintf ( stdout, "\n-input2 format.....See -input");
-               fprintf ( stdout, "\n-exon_boundaries   obj file");
-               fprintf ( stdout, "\n-out    fname......Output file (defualt is STDOUT");
-               fprintf ( stdout, "\n-output format.....Output Format, default is fasta_aln");
-               fprintf ( stdout, "\n-struc_in   name...File containing a coded aln");
-               fprintf ( stdout, "\n-struc_in_f format.See -input and output format section");
-               fprintf ( stdout, "\n-struc_out  fname..Name of the output structure");
-               fprintf ( stdout, "\n-struc_out_f symbol");
-               fprintf ( stdout, "\n-keep_case=on|off..keep case, On by default");
-               fprintf ( stdout, "\n-action +ac1 +ac2..See the action section");
-               fprintf ( stdout, "\n-rename <file>.....Rename the sequences following <file> indications");
-               fprintf ( stdout, "\n...................File Format: One couple <name1><space><name2>/line");
-               fprintf ( stdout, "\n...................Rename order <name1> into <name2>");
-               fprintf ( stdout, "\n...................code file: -output code_name");
-               fprintf ( stdout, "\n-code   <file>     Rename file <name1> to <name2>");
-               fprintf ( stdout, "\n-decode <file>     Rename file <name2> to <name1>");
-               fprintf ( stdout, "\n-no_warning........Suppresses all warnings");
-               fprintf ( stdout, "\n-cache.............use,ignore,update,local, DirectoryName");
-               
-               
-               fprintf ( stdout, "\n");
-
-               fprintf ( stdout, "\n***********     REFORMAT ACTIONS               *****************");
-               fprintf ( stdout, "\n     +Xaction.............Specifies which file undergoes the action");
-               fprintf ( stdout, "\n     +Xaction.............X=1: -in");
-               fprintf ( stdout, "\n     +Xaction.............X=2: -in2");
-               fprintf ( stdout, "\n     +Xaction.............X=3: -struc_in");
-               fprintf ( stdout, "\n     +name2unique_name....replace duplicated name with name_#");
-               fprintf ( stdout, "\n     +swap_header........,swapp comments: replace comments/name in 1 by in 2");
-               fprintf ( stdout, "\n     +swap_lib_header.F...Replace the sequences in the tc_lib (-in) with those in F");
-               fprintf ( stdout, "\n     .....................F is a legal FASTA file");
-               
-                
-               fprintf ( stdout, "\n     +translate[0-2]......Translate on Frame 0, 1, 2 ");
-               fprintf ( stdout, "\n     +translate[3]........longuest ORF on direct strand");
-               fprintf ( stdout, "\n     +translate[4]........longuest ORF on direct+complementary strand");
-               
-               
-               fprintf ( stdout, "\n     +add_scale..<offset>.addscale below aln"); 
-               
-               fprintf ( stdout, "\n     +rm_gap n ...........Removes col with n%% gap [n=100]");
-               fprintf ( stdout, "\n     +rmgap_col SEQ1:SEQ2.Removes column with a gap in SEQ [#] ");
-       
-               fprintf ( stdout, "\n     +backtranslate.......Random Backtranslation");
-               fprintf ( stdout, "\n     +complement..........Produces the reverse complement");
-               
-               fprintf ( stdout, "\n     +reorder.............Reorders sequences of <in> according to <in2>");
-               fprintf ( stdout, "\n     .........random......Random_order");
-               fprintf ( stdout, "\n     .........tree........Tree Order (in2)");
-               fprintf ( stdout, "\n     +reorder_column.....Reorders sequences of <in> according to <in2>");
-               fprintf ( stdout, "\n     .........random......Random_order");
-               fprintf ( stdout, "\n     .........tree..mode..Tree Order (comuted with mode: sarmat, idmat, blosum62mt...");
-               fprintf ( stdout, "\n     +aln2random_aln SCR..Randomize the aln, S: swap sequences names");
-               fprintf ( stdout, "\n     .....................Swap residues within colums");
-               fprintf ( stdout, "\n     .....................Swap residues across the aln");
-               fprintf ( stdout, "\n     +aln2sample......N......");
-               fprintf ( stdout, "\n     +aln2bootstrap...N......");
-               
-
-               fprintf ( stdout, "\n     +chain...............Identifies all the intermediate sequences from <-in>");
-               fprintf ( stdout, "\n     .....................needed to join every sequence pair in <-in2>");
-       
-               fprintf ( stdout, "\n     +aln2cons  mat_name..Ouputs a consensus sequence");
-               fprintf ( stdout, "\n     .....................The consensus is determined using mat");
-               fprintf ( stdout, "\n     .....................By Default, mat=blosum62mt, name=Cons");
-               fprintf ( stdout, "\n     +aln2resindex........Prints the sequence index of each residue in -in for each -in2 sequence");
-               fprintf ( stdout, "\n     +collapse_aln <new name> <seq1> <seq2...> | file name");
-                fprintf ( stdout, "\n     .....................Replaces a group of sequences with its consensus");
-               fprintf ( stdout, "\n     .....................The replacement sequence is named <new_seq>");
-               fprintf ( stdout, "\n     .....................List of sequences can be provided via a file");          
-               fprintf ( stdout, "\n     .....................File:>new_name seq1 seq2 seq3....");
-               fprintf ( stdout, "\n     +original_seqnos.....Keep original seqnos [SWITCH]");
-               fprintf ( stdout, "\n     +seqnos..............Print Seqnos [SWITCH]");
-               fprintf ( stdout, "\n     +code_dna_aln........Undocumented")  ;
-               fprintf ( stdout, "\n     +grep..[NAME|SEQ|COMMENT]..[KEEP|REMOVE]..[string]......");
-               fprintf ( stdout, "\n     .....................Keeps or Removes Sequences matching string");
-               fprintf ( stdout, "\n     +extract_block <seq> <start> <end> | <seq> <pos> |<filename>");
-               fprintf ( stdout, "\n     .....................Extract column pos OR [start to end[");
-               fprintf ( stdout, "\n     .....................<filename> Format");
-               fprintf ( stdout, "\n     .......................seq start end | seq pos");
-               fprintf ( stdout, "\n     .......................# for comments");
-               fprintf ( stdout, "\n     .......................! seq offset_value (0 by default)");
-               fprintf ( stdout, "\n     .....................Can extract as many positions as needed");
-               fprintf ( stdout, "\n     .....................seq=cons: measure positions on the full aln");
-               fprintf ( stdout, "\n     +cat_aln.............Concatenates the alignments input via -in and -in2");
-               fprintf ( stdout, "\n     +cat_aln.............-if no -in2, -in is expected to be a list of alignments to concatenate");
-               fprintf ( stdout, "\n     +orthologous_cat..<mode>: mode=voronoi or nothing");
-               fprintf ( stdout, "\n     ......................-in: sequences from different species");
-               fprintf ( stdout, "\n     ..................... -in2: list of species in fasta");
-               fprintf ( stdout, "\n     ..................... sequence must be named: <species>_<genename>");
-               fprintf ( stdout, "\n     ..................... all paralogues will be concatenated");
-               
-               fprintf ( stdout, "\n     +aln2replicate N name");
-               fprintf ( stdout, "\n     ..................... Generates N replicates in Fasta");
-               fprintf ( stdout, "\n     ..................... Voronoi weights can be used");
-                               
-               fprintf ( stdout, "\n     +msalist2cat_pwaln.min..max");
-               fprintf ( stdout, "\n     .....................extract all pw projections and conctaenates those\n");
-               fprintf ( stdout, "\n     .....................where id>=min and id<=max\n");
-               fprintf ( stdout, "\n     .....................min and max can be omitted (min=0, max=100)\n");
-               
-               fprintf ( stdout, "\n     +seq2blast <matrix>..gather all possible homologues from NR (EBI BLAST)");
-               fprintf ( stdout, "\n     +seq2msa <matrix>....makes a standard progressive alignment using matrix");
-               fprintf ( stdout, "\n     +realign_block <c1> <c2> <pg>");
-               fprintf ( stdout, "\n     .....................Realign column c1 to c2 (non inc.) with pg)");
-               fprintf ( stdout, "\n     .....................pg reads fasta and outputs fasta");
-               fprintf ( stdout, "\n     .....................pg -infile=<infile> -outfile=<outfile>");
-               fprintf ( stdout, "\n     +extract_seq seq_name (start end seq_name start end...) | filename");
-               fprintf ( stdout, "\n     .....................seq_name='*': every seq");
-               fprintf ( stdout, "\n     .....................start='*'   : real start");
-               fprintf ( stdout, "\n     .....................end='*'     : real end");
-               fprintf ( stdout, "\n     .....................filename: fasta format");
-               fprintf ( stdout, "\n     +extract_seq_list name1 name2");
-               fprintf ( stdout, "\n     .....................Extracts entire sequences");
-               fprintf ( stdout, "\n     +remove_seq sn1 sn2..Removes sequences sn1, sn2...");
-               fprintf ( stdout, "\n     +remove_seq empty....Removes empty sequences (gap only)");
-               fprintf ( stdout, "\n     +remove_seq unique...Remove all multiple occurences except the first");
-               fprintf ( stdout, "\n     +thread_profile_on_msa <file>");
-               fprintf ( stdout, "\n     .....................Threads a list of profiles on corresponding seq");
-               fprintf ( stdout, "\n     .....................File: >seqname _R_ <msa file> [nlines]");
-               
-               fprintf ( stdout, "\n     +thread_dna_on_prot_aln");
-               fprintf ( stdout, "\n     .....................-in DNA.seq and -in2 AA.aln"); 
-                fprintf ( stdout, "\n     +thread_struc_on_aln");
-               fprintf ( stdout, "\n     .....................-in structure and -in2 aln"); 
-               fprintf ( stdout, "\n     +use_cons............Use the consensus for n[SWITCH]");
-               fprintf ( stdout, "\n     +upper.n|[n1-n2].....n omitted sets everything to upper case");
-               fprintf ( stdout, "\n     .....................To use n: provide a number_aln via:");
-               fprintf ( stdout, "\n     .....................-struc_in <number_file> -struc_in_f number_aln");
-               fprintf ( stdout, "\n     .....................if use_cons is set n, is read on the cons");
-               fprintf ( stdout, "\n     .....................n: will upper every residue with a value of n in struc_in");
-               fprintf ( stdout, "\n     .....................[n1-n2]: upper residues between n1 and n2");
-               fprintf ( stdout, "\n     +lower  n|[n1-n2]....See +upper");
-               fprintf ( stdout, "\n     +switchcase  n|[n1-n2]See +upper");
-               fprintf ( stdout, "\n     +color_residue <seq> <pos> <color> | file");
-               fprintf ( stdout, "\n     .....................File: seq_name pos color");
-               fprintf ( stdout, "\n     .....................color: 0-9");
-               fprintf ( stdout, "\n     +edit_residue <seq> <pos> <edit> | file");
-               fprintf ( stdout, "\n     .....................File: seq_name pos color");
-               fprintf ( stdout, "\n     .....................edit: upper|lower|symbol");        
-               
-               
-               
-               fprintf ( stdout, "\n     +keep   n|[n1-n2]....Only keep residues that have a score between n1 and n2");
-               
-               fprintf ( stdout, "\n     +invert..............Inverts the sequences: CAT => TAC");
-               fprintf ( stdout, "\n     +rotate name         Rotate an MSA, names each sequence name_col#");
-               fprintf ( stdout, "\n     +convert n|[n1-n2] s1 s2 ....");
-               fprintf ( stdout, "\n     +merge_annotation.... ");
-               
-               fprintf ( stdout, "\n     .....................Converts residues with your alignment");
-               fprintf ( stdout, "\n     .....................similar to upper");
-               fprintf ( stdout, "\n     .....................s1: ABCDe turns every ABCD into e");
-               fprintf ( stdout, "\n     .....................s1: #e turns any residue into e");
-               fprintf ( stdout, "\n     aln2short_aln L C S..Turns sequences into shorter sequences");
-               fprintf ( stdout, "\n     .....................L: list of residues to keep");
-               fprintf ( stdout, "\n     .....................S: Size of Streches replaced by symbol C");
-
-                               
-               fprintf ( stdout, "\n     +random n l..........Generates N random sequences of len l");
-               fprintf ( stdout, "\n     .....................You must provide a file with -in");
-               fprintf ( stdout, "\n     +count n|[n1-n2] s1 s2....");
-               fprintf ( stdout, "\n     .....................Counts residues with your alignment");
-               fprintf ( stdout, "\n     .....................similar to convert");
-               fprintf ( stdout, "\n     +print_format........prints the format name");
-               fprintf ( stdout, "\n     +keep_name...........Keep the original sequence name on extraction");
-               
-               fprintf ( stdout, "\n     +remove_aa pos Ml Ncycle Random_len");
-               fprintf ( stdout, "\n     .....................Randomly modifies an alignment");
-               fprintf ( stdout, "\n     .....................pos=0: chosen randomly");
-               fprintf ( stdout, "\n     .....................MaxLen of the deletions, Ncycle: number of cycles");
-               fprintf ( stdout, "\n     .....................Random_len: 0 sets the len to maxlen, 1 to a random value");
-               fprintf ( stdout, "\n     +remove_nuc.x........Remove Position 1, 2 or 3 of every codon"); 
-               fprintf ( stdout, "\n     +evaluate matrix..gop..gep");
-               fprintf ( stdout, "\n     .....................Make a similarity evaluation with matrix");
-               fprintf ( stdout, "\n     .....................use -output=score_ascii, or score_html.");
-               fprintf ( stdout, "\n     .....................You can filter on the values");
-               fprintf ( stdout, "\n     +evaluate matrix..gop..gep");
-               fprintf ( stdout, "\n     .....................Make an SP evaluation with matrix");
-               fprintf ( stdout, "\n     .....................Uses Natural Gap penalties");
-               fprintf ( stdout, "\n     .....................gop and gep must be negative");
-               fprintf ( stdout, "\n     .....................use -output=color_ascii, color_html to get a color display");
-
-               fprintf ( stdout, "\n.....+evaluate_lat........Make a lateral evaluation with matrix");
-               fprintf ( stdout, "\n     +msa_weight proc.....Computes weights using the procedure");
-               fprintf ( stdout, "\nRNA analysis Post Processing___________________________________________________");
-               fprintf ( stdout, "\n     +aln2alifold.........Turns the MSA into a consensus structure");
-               fprintf ( stdout, "\n     +add_alifold.........adds an alifold consensus structure");
-
-               fprintf ( stdout, "\n     +alifold2analyze.mode..mode=stat_cache_list_aln_color_html_ps_usegap");
-               fprintf ( stdout, "\n     .......................stat: compile Number of compensated mutations");
-               fprintf ( stdout, "\n     .......................cache: ascii-code compensated mutations on aln");
-               fprintf ( stdout, "\n     .......................html: color-code compensated mutations on aln");
-               fprintf ( stdout, "\n     .......................aln: mark compensated mutations on stockholm aln");
-               fprintf ( stdout, "\n     .......................usegap: do not ignore positions with gaps");
-               
-               fprintf ( stdout, "\n     +RNAfold_cmp.........compares the sec struc of in1 and in2 (computes them with alifold if missing)");
-                               
-               fprintf ( stdout, "\nMSA Post Processing___________________________________________________");
-                       fprintf ( stdout, "\n     +force_aln filename|seq1 res1 seq2 res2");
-               fprintf ( stdout, "\n     .....................Forces residue 1 of seq1 to be aligned with res2 of seq 2");
-               fprintf ( stdout, "\n     .....................In a file, there must be one pair of interaction/line");
-               fprintf ( stdout, "\n     +sim_filter[_aln_Ix_iy_Cz_cw <seq>");
-               fprintf ( stdout, "\n     ....................._<unaln or aln>, aln is assumed");
-               fprintf ( stdout, "\n     ....................._I max identity to seq");
-               fprintf ( stdout, "\n     ....................._i min identity to seq");
-               fprintf ( stdout, "\n     ....................._C max cov on seq");
-               fprintf ( stdout, "\n     ....................._c min cov on seq");
-               fprintf ( stdout, "\n     +trim[_aln_%%%%50_n111_N50_T_Fn_fS_pS_max_sim_P0_K0] [string2]");
-               fprintf ( stdout, "\n     ....................._<seq or aln>, aln is assumed");
-               fprintf ( stdout, "\n     ....................._%%%%<max/min_percent_similarity>");
-               fprintf ( stdout, "\n     ....................._max Or _min <keep sequences for which sim is the max or the min [Def: _max>");
-               fprintf ( stdout, "\n     ....................._cov Or _sim Filter according to the coverage [Def: _sim]");
-               fprintf ( stdout, "\n     ....................._n<max_number_of_sequence>       ");
-               fprintf ( stdout, "\n     ....................._N<percent_of_sequences_to_keep>");
-               fprintf ( stdout, "\n     ....................._T Reorder the sequences according to a tree BEFORE triming");
-               fprintf ( stdout, "\n     ....................._Fn Keep only sequences that have AT LEAST ONE residue aligned");
-               fprintf ( stdout, "\n     ......................in the n first and n last columns. ");
-               fprintf ( stdout, "\n     ....................._O<min sim> Remove outlayers that have less than min average sim with other sequences"); 
-               fprintf ( stdout, "\n     ....................._Kn Forces the n top sequences to be kept");
-               fprintf ( stdout, "\n     ....................._P_ Print a summary in stderr");
-               
-               
-               fprintf ( stdout, "\n     .....................Keeping Sequences: Sequences provided via -in2 will be kept");
-               
-               fprintf ( stdout, "\n     .....................Keeping Sequences: Sequences whose name contains <string> in field fS will be kept");
-               fprintf ( stdout, "\n     ....................._f<NAME|SEQ|COMMENT> designates a field"); 
-               fprintf ( stdout, "\n     .....................<string> is a Perl regular expression");
-               fprintf ( stdout, "\n     +aln2unalign Mode Penalty Threshold");
-               fprintf ( stdout, "\n     .....................Identifies all the streches less conserved than than the average");
-               fprintf ( stdout, "\n     .....................Mode: lower|number|unalign Act on all the resiues withs score<Thres");
-               fprintf ( stdout, "\n     .....................Penalty: FSA penalty align2unalign, Def=90");
-               fprintf ( stdout, "\n     .....................Threshold: Fraction of unaligned residues(0-9) Def=2");
-               
-               fprintf ( stdout, "\n     +clean_cdna..........Undocumented"); 
-               fprintf ( stdout, "\n     +clean_maln..........Undocumented"); 
-               fprintf ( stdout, "\nTree Analysis___________________________________________________");
-               
-       
-               fprintf ( stdout, "\n     +tree_prune..........Prune the tree -in using the sequences provided via -in2");
-               fprintf ( stdout, "\n     +tree_cmp............Compares the tree -in and the tree -in2");
-               fprintf ( stdout, "\n     +tree_cmp_list......Compares the tree -in and the tree_list -in2");
-               fprintf ( stdout, "\n     .....................Sets the support as boostrap value in the -in tree");
-               
-               fprintf ( stdout, "\n     .....................-in and -in2 can contain different taxons");
-               fprintf ( stdout, "\n     +tree_scan.P1..P2.....scans alignment <-in> with tree <-in2>)");
-               fprintf ( stdout, "\n     ......................+tree_scan help to get P1 information");
-               fprintf ( stdout, "\n     ......................+aln2tree help to get P2 information");
-               
-               fprintf ( stdout, "\n     .....................-in and -in2 can contain different taxons");
-               fprintf ( stdout, "\n     +tree2node.......... Reports the node list along with the split");
-               fprintf ( stdout, "\n     ..................... splits can be described with the seq order ");
-               fprintf ( stdout, "\n     ..................... provided via -in3=<sequence> ");
-               
-               fprintf ( stdout, "\n     +treelist2groups.N....count all topologies within a list of trees");
-               fprintf ( stdout, "\n     .....................-in is in fasta format with each name being a newick file");
-               fprintf ( stdout, "\n     .....................-in2 can be a list of sequences used to trim the trees");
-               fprintf ( stdout, "\n     ......................N can be used to unresolve the trees with Depth N");
-               fprintf ( stdout, "\n     +treelist2lti.N.C.....Reports the average stability of each sequence neighborhood");
-               fprintf ( stdout, "\n     ......................Species can be selected via -in2 [Fasta file with Taxon names]");
-               fprintf ( stdout, "\n     ......................OR the sequences observed in C%% of the files are kept [Def: C=100]");
-               
-               
-               fprintf ( stdout, "\n     +treelist2seq.C.......Reports the species observed in C%% of the trees");
-               fprintf ( stdout, "\n     +treelist2splits......List and counts all the splits in a list of trees");
-               fprintf ( stdout, "\n     ......................splits can be restricted to a list of sequences provided via -in2");
-               fprintf ( stdout, "\n     +treelist2dmat.......outputs a distance matrix for a list of trees");
-
-               fprintf ( stdout, "\n     +tree_compute n s....Computes a tree using the MSA provided with -in");
-               fprintf ( stdout, "\n     ....................n:0-9, controls the way the MSA is filtered");
-               fprintf ( stdout, "\n     ....................s:pam250mt|blosum62mt|categories|enthropy");
-               fprintf ( stdout, "\n     ....................s:controls the column evaluation in MSA");
-               fprintf ( stdout, "\n     +change_distances.f.f:float, sets all the distances to f in the tree");
-               fprintf ( stdout, "\n     +change_bootstrap n..:n=0 removes all the bootstrap values");
-               fprintf ( stdout, "\n     .....................:n!=0 adds a the value n to every node");
-               fprintf ( stdout, "\n     +tree2dpatree........Replaces tree distances with the minimum %%ID in");
-               fprintf ( stdout, "\n     .....................the depending subgroup. The ID is measured on an");
-               fprintf ( stdout, "\n     .....................-in=TREE -in2=ALN");
-               fprintf ( stdout, "\n     +unroot..............Removes the root in the input tree");
-               fprintf ( stdout, "\n     +tree2group.N.I.P....Reports all the tree subgroup with at most Nseq");
-               fprintf ( stdout, "\n     .....................and at min I%% identity. Output format can be read by");
-               fprintf ( stdout, "\n     .....................collapse_tree. New groups are named P_1, P_2...");               
-               fprintf ( stdout, "\n     +collapse_tree.F.....Collapses trees. F is either a file or a list");
-               fprintf ( stdout, "\n     .....................<new name> <seq1> <seq2>...");
-               fprintf ( stdout, "\n     +aln2tree............Computes a tree");
-               fprintf ( stdout, "\n     ..ktupN|aln|sarmat   ktupN: match size N to estimate distances");
-               fprintf ( stdout, "\n     .....................aln: Measures distances on aln");
-               fprintf ( stdout, "\n     .....................sarmat: expects in to be a SAR matrix of O and I");
-               fprintf ( stdout, "\n     ..nj | cw............Runs Neighbor Joining OR Cw to compute Tree");
-               fprintf ( stdout, "\n     ..dpa................Turns the tree into a daptree (+tree2dpatree)");
-               fprintf ( stdout, "\n     +node_sort..<name>...Sort leafs of tree n1, by node distance");
-                         
-               
-               fprintf ( stdout, "\nMatrix Analysis___________________________________________________");
-               fprintf ( stdout, "\n     +aln2mat_diaa........computes a dinucleotide matrix on a list of aln");
-               fprintf ( stdout, "\n     +aln2mat.............computes a log odd matrix");
-               
-               fprintf ( stdout, "\n     +seq2lat_mat.........computes a transition matrix on seq provided via -in");
-               
-               fprintf ( stdout, "\nStructure Analysis___________________________________________________");
-               fprintf ( stdout, "\n     +struc2contacts.A.B D.Displays in capitals all the residues of A");
-               fprintf ( stdout, "\n     ......................Less than D Angs from a residue of B");
-               fprintf ( stdout, "\n     ......................A and B are pdb file, D is a distance in Angs");
-               fprintf ( stdout, "\n     +seq2contacts.A.D.....Identifies all the residues in contact with ligands");
-               fprintf ( stdout, "\n     ......................Ligands are in the FASTA header of struc in");
-               fprintf ( stdout, "\n     ......................>Name _S_ [Target Struc] [Ligand1] [Chain] ...");
-               fprintf ( stdout, "\n     ......................Output: number_fasta: 0=no contact, 1=ligand 1...");
-               fprintf ( stdout, "\n     ......................9: residues in contact with more than 1 ligand");
-               fprintf ( stdout, "\n     ......................Use -output=color_html/ascii to display result");
-               fprintf ( stdout, "\n     +struc2nb...D.........Display a list of all the residues D appart");
-               fprintf ( stdout, "\n     +rm_template...V......Removes _[S|G|R]_[template] to sequence names");
-               fprintf ( stdout, "\n     ......................V: omitted | sequences <=> Output sequences");
-               fprintf ( stdout, "\n     ......................V: template <=> Output templates");
-                       
-               fprintf ( stdout, "\n     +add_template.F.......Add _[S|G|R]_[template] to sequence names");
-               fprintf ( stdout, "\n     ......................F can either be a fasta file or an executable");
-               fprintf ( stdout, "\n     ......................F: File: >name _S_ template");
-               fprintf ( stdout, "\n     ......................F: executable: pg -infile=<seq> -outfile=<tagged>");
-               fprintf ( stdout, "\nMatrix Comparison___________________________________________________");
-               fprintf ( stdout, "\n    +mat2cmp...............Returns the correlation coefficient between two matrices");
-               fprintf ( stdout, "\n    .......................-in mat1 -input matrix, -in2 mat2 -input2 matrix");
-               fprintf ( stdout, "\n***********  INPUT FORMATS: Alignments *****************");
-               fprintf ( stdout, "\n     AUTOMATIC RECOGNITION");
-               fprintf ( stdout, "\n     perl_xxx:............. runs xxx onto the input file");
-               fprintf ( stdout, "\n     xxxx <file> > outfile..xxx reads any formats, outputs fasta");
-               fprintf ( stdout, "\n     amps_aln       saga_aln      ");
-               fprintf ( stdout, "\n     clustal_aln    fasta_aln     msf_aln  ");
-               fprintf ( stdout, "\n     dali_aln       gotoh_aln     pima_aln");
-               fprintf ( stdout, "\n     dialign_aln    matrix        conc_aln");    
-               fprintf ( stdout, "\n     NON AUTOMATIC RECOGNITION (use the -input file to specify the format");
-               fprintf ( stdout, "\n     number_aln     newick_tree");
-               fprintf ( stdout, "\n");
-               fprintf ( stdout, "\n***********  INPUT FORMATS: Sequences *****************");
-               fprintf ( stdout, "\n     fasta_seq      dali_seq       pir_seq");
-               fprintf ( stdout, "\n     barton_list_tc amps_sd_scores EST_fasta");
-               fprintf ( stdout, "\n     gor_seq        gor_struc      number_fasta[*]");
-               fprintf ( stdout, "\n     swissprot      tc_lib         pdb_struc");
-               fprintf ( stdout, "\n");
-               fprintf ( stdout, "\n***********  INPUT FORMATS: Structures   *****************");
-               fprintf ( stdout, "\n    rna_number");
-               fprintf ( stdout, "\n    alifold");
-               fprintf ( stdout, "\n***********  OUTPUT FORMATS: Alignments ******************");
-               fprintf ( stdout, "\n     compressed_aln saga_aln        clustal_aln");
-               fprintf ( stdout, "\n     phylip_aln     msf_aln         fasta_aln ");
-               fprintf ( stdout, "\n     pir_aln        ");
-               fprintf ( stdout, "\n     color_html,color_ps......colored using the struc_in file  ");
-               fprintf ( stdout, "\n     color_protogene..........colors codons");
-               fprintf ( stdout, "\n     color_exoset.............mixes conservation (gray) and introns (RGB)");
-               fprintf ( stdout, "\n     color_pdf      pw_lib_saga_aln tdna_aln");
-               fprintf ( stdout, "\n     thread_dna_on_prot_aln");
-               fprintf ( stdout, "\n");
-               fprintf ( stdout, "\n*********** OUTPUT FORMATS: sequence  ******************");
-               fprintf ( stdout, "\n     fasta_seq      fasta_seq1     gotoh_seq");
-               fprintf ( stdout, "\n     gor_seq        cache_id");
-               fprintf ( stdout, "\n     tblastx_db1     tblastx_db2    tblastx_db3");
-               fprintf ( stdout, "\n*********** OUTPUT FORMATS: weights ******************");
-               fprintf ( stdout, "\n     constraints    saga_pw_sd_weights  nseq\n");
-               fprintf ( stdout, "\n");
-               fprintf ( stdout, "\n*********** OUTPUT Formats: special  ****************");
-               fprintf ( stdout, "\n     len             name               statistics<_hnrglNL>");
-               fprintf ( stdout, "\n      sim............outputs a similarity matrix based on an id comparison of -in");
-               fprintf ( stdout, "\n      sim_sarmat.....in is sar matrix");
-               fprintf ( stdout, "\n      sim_idscore....makes dp alignment of the sequences using Blosum62mt");
-               fprintf ( stdout, "\n      sim_idscoreDNA.makes dp alignment of the sequences using idmat");
-               fprintf ( stdout, "\n      sim............if -in2 is set: in1 vs in2, idscore");
-               
-               fprintf ( stdout, "\n     code_name......Outputs a compact list of names for code/decode");
-
-               
-               
-               fprintf ( stdout, "\n");
-       
-               
-               fprintf ( stdout, "\n");
-               return EXIT_SUCCESS;
-               }
-       
-       argv=standard_initialisation (argv, &argc);
-       
-               
-       for ( a=1; a< argc; a++)
-               {
-                 if (a==1 && argv[1][0]!='-')
-                   {
-                     sprintf( in_file, "%s", argv[a]);
-                   }
-                 else if ( strcmp ( argv[a], "-in_f")==0 ||strm(argv[a],"-input") )
-                       {
-                       if ( strcmp ( argv[a], "-in_f")==0) fprintf ( stdout,"\nWARNING: %s deprecated, use -input instead", argv[a]);
-               
-                       sprintf ( in_format, "%s", argv[a+1]);
-                       a++;
-                       }
-               
-               else if ( strcmp ( argv[a], "-cache")==0 )
-                       {
-                       sprintf (cache, "%s", argv[a+1]);
-               
-                       a++;
-                       }
-                 
-               
-               else if ( strcmp ( argv[a], "-exon_boundaries")==0 )
-                       {
-               
-                         set_string_variable ("exon_boundaries", argv[a+1]);
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_threshold")==0 )
-                       {
-               
-                         set_int_variable ("overaln_threshold", atoi(argv[a+1]));
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_target")==0 )
-                       {
-               
-                         set_int_variable ("overaln_target", atoi(argv[a+1]));
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_P1")==0 )
-                       {
-                         
-                         set_int_variable ("overaln_P1", atoi(argv[a+1]));
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_P2")==0 )
-                       {
-               
-                         set_int_variable ("overaln_P2", atoi(argv[a+1]));
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_P3")==0 )
-                       {
-               
-                         set_int_variable ("overaln_P3", atoi(argv[a+1]));
-                         a++;
-                       }
-               else if ( strcmp ( argv[a], "-overaln_P4")==0 )
-                       {
-               
-                         set_int_variable ("overaln_P4", atoi(argv[a+1]));
-                         a++;
-                       }
-                 
-               else if ( strcmp ( argv[a], "-in2_f")==0||strm(argv[a],"-input2") )
-                       {
-                         if ( strcmp ( argv[a], "-in_f")==0) fprintf ( stdout,"\nWARNING: %s deprecated, use -input2 instead", argv[a]);
-               
-                       sprintf ( in2_format, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp ( argv[a], "-seqnos")==0)
-                       {
-                       sprintf (action_list[n_actions++], "seqnos");
-                       }
-               
-               else if ( strcmp( argv[a], "-action")==0)
-                       {
-                       while ((a+1)<argc && argv[a+1][0]!='-')
-                         {
-                           sprintf (action_list[n_actions++], "%s", argv[a+1]);
-                           a++;
-                         }
-                       }
-               else if ( strcmp ( argv[a], "-keep_case")==0)
-                       {
-                         if(!NEXT_ARG_IS_FLAG)RAD->keep_case=1;
-                         else RAD->keep_case=(strm3(argv[a], "on","ON","On"))?1:0;
-                         
-                       }
-               
-               else if ( strcmp ( argv[a], "-conv")==0)
-                       {
-                       if ( strncmp ( argv[a+1],"set",3)==0)RAD->symbol_list=make_symbols (argv[++a],&(RAD->n_symbol));
-                       else
-                           {
-                           RAD->symbol_list=declare_char (STRING, STRING);
-                           while(!NEXT_ARG_IS_FLAG)
-                                 { 
-                                 sprintf ( RAD->symbol_list[RAD->n_symbol], "%s", argv[++a]);
-                                 RAD->n_symbol++; 
-                                 }
-                           }
-                       }
-               else if ( strcmp ( argv[a], "-struc_in_f")==0 ||strcmp ( argv[a], "-input3")==0 )
-                       {
-                       sprintf ( struc_in_format, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp ( argv[a], "-out_f")==0 ||strm(argv[a],"-output") )
-                       {
-                       if ( strcmp ( argv[a], "-out_f")==0) fprintf (stdout, "\nWARNING: %s deprecated, use -output instead", argv[a]);
-                       sprintf ( out_format, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strm ( argv[a], "-struc_out_f") || strm ( argv[a], "-output_struc") )
-                       {
-                       sprintf ( struc_out_format, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-in")==0)
-                       {
-                       sprintf( in_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-rename")==0)
-                       {
-                       sprintf( rename_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-code")==0)
-                       {
-                       code=CODE;
-                       sprintf( rename_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-decode")==0)
-                       {
-                         code=DECODE;
-                         sprintf( rename_file, "%s", argv[a+1]);
-                         a++;
-                       }
-               else if ( strcmp (argv[a],"-in2")==0)
-                       {
-                       sprintf( in2_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-coor")==0)
-                       {                       
-                       sprintf( RAD->coor_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if (strcmp (argv[a],"-out")==0) 
-                       {
-                       sprintf (out_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if (strcmp (argv[a],"-out2")==0) 
-                       {
-                       sprintf (out2_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp (argv[a],"-struc_in")==0 || strcmp (argv[a],"-in3")==0 )
-                       {
-                       sprintf( struc_in_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if (strcmp (argv[a],"-struc_out")==0) 
-                       {
-                       sprintf (struc_out_file, "%s", argv[a+1]);
-                       a++;
-                       }
-               else if ( strcmp ( argv[a], "-rm_gap")==0)
-                       {
-                       RAD->rm_gap=1;
-                       }
-               else if ( strcmp ( argv[a], "-print_format")==0)
-                       {
-                       print_format=1;
-                       }
-               else if ( strcmp ( argv[a], "-no_warning")==0)
-                       {
-                       set_warning_mode (NO);
-                       }
-               
-               else    
-                       {
-                       fprintf ( stdout, "\nUNKNOWN OPTION: %s", argv[a]);
-                       myexit(EXIT_FAILURE);
-                       }
-               }
-/****************************************************************/
-/*                                                              */
-/*                          Data Preparation                    */
-/*                                                              */
-/*                                                              */
-/****************************************************************/
-       
-       prepare_cache (cache);    
-/****************************************************************/
-/*                                                              */
-/*                          INPUT SEQ/ALN                       */
-/*                                                              */
-/*                                                              */
-/****************************************************************/
-       
-
-       if ( strm (out_format, "hasch"))
-         {
-           fprintf ( stdout, "%d\n", (int)hash_file(in_file));
-           return EXIT_SUCCESS;
-         }
-
-       if ( rename_file[0])
-         {
-           rename_list=read_rename_file ( rename_file,code);
-         }
-
-
-       if ((D1=read_data_structure (in_format, in_file,RAD))!=NULL)
-         {
-           in_format=(in_format && in_format[0])?in_format:identify_seq_format(in_file);
-           
-           if (print_format)fprintf ( stdout, "\nFILE:%s FORMAT:%s\n", in_file, in_format);
-         }
-       else if ( in_file[0])
-               {
-                 fprintf ( stdout, "\nFORMAT of file %s Not Supported[FATAL:%s]\n", in_file, PROGRAM);
-               myexit(EXIT_FAILURE);
-               }
-       
-       if ((D2=read_data_structure (in2_format, in2_file,RAD))!=NULL){if (print_format)fprintf ( stderr, "\nFILE:%s FORMAT:%s\n", in2_file, (in2_format&&in2_format[0])?in2_format:identify_seq_format(in2_file));}
-
-       else if (!D2 && in2_file[0])
-               {
-                 fprintf ( stderr, "\nFORMAT of file %s Not Supported [FATAL:%s]\n", in2_file, PROGRAM);
-               myexit(EXIT_FAILURE);
-               }
-       
-/*STRUCTURE INPUT*/    
-       
-       
-       if ((D_ST=read_data_structure (struc_in_format, struc_in_file,RAD)))
-           {
-
-             if ( D_ST->CL)
-               {
-                 Constraint_list *CL;
-                 int *entry;
-
-                 CL=D_ST->CL;
-                 
-                 while ((entry=extract_entry (CL)))
-                   {
-                     if ( D_ST->S)(D_ST->S)->seq[entry[SEQ1]][entry[R1]-1]=entry[WE];
-                   }
-                 thread_seq_struc2aln (D_ST->A, D_ST->S);
-               }
-             else if ( name_is_in_list ("cons", ((D_ST)->A)->name, ((D_ST)->A)->nseq, 100));
-             else
-               {
-                 D_ST->A=copy_aln ( D1->A, D_ST->A);
-                 
-                 thread_seq_struc2aln (D_ST->A, D_ST->S);
-               }
-           }
-       else if ((strcmp (struc_in_format, "rna_number")==0) && in_file[0])
-               {
-               D_ST->RNA_ST=read_rna_struc_number((D1->A),struc_in_file);
-               }
-       else if ( struc_in_format[0] && struc_in_file[0])
-               {
-                   
-               fprintf ( stderr, "\nSTRUC %s UNKNOWN[FATAL]", struc_in_format);
-               myexit(EXIT_FAILURE);
-               }
-       else
-         {
-           D_ST=vcalloc ( 1, sizeof (Sequence_data_struc));
-         }
-
-       action=declare_char(100, 100);
-       for ( a=0; a< n_actions;)
-         {
-          if (action_list[a][0]!='+')
-             {
-               fprintf ( stderr, "\nWARNING: Action %s Unknown. Actions start with a +", action_list[a]);
-               myexit (EXIT_FAILURE);
-             }
-          else
-            {
-            b=0;
-            sprintf ( action[b++], "%s", action_list[a++]+1);
-            while ( a<n_actions && action_list[a][0]!='+')sprintf ( action[b++], "%s", action_list[a++]);
-            modify_data( D1, D2, D_ST, action,b, RAD);
-            }
-         }
-
-       if (rename_list)
-         {
-           if (D1)D1->A= rename_seq_in_aln(D1->A, rename_list);
-           if (D2)D2->A=rename_seq_in_aln (D2->A, rename_list);
-           if (D_ST)D_ST->A=rename_seq_in_aln (D_ST->A,rename_list);
-           
-           if (D1)D1->T  =rename_seq_in_tree (D1->T, rename_list);
-           if (D2)D2->T  =rename_seq_in_tree (D2->T, rename_list);
-           if (D_ST)D_ST->T=rename_seq_in_tree (D_ST->T,rename_list);
-         }
-
-
-       if ( !out_format[0] && ! struc_out_format[0])sprintf ( out_format, "%s", (in_format && in_format[0])?in_format:"fasta_aln");
-       main_output  ( D1, D2, D_ST, out_format, out_file);
-       main_output  ( D1, D2, D_ST, struc_out_format, struc_out_file);
-       return EXIT_SUCCESS;
-       }
-       
-
-
-
-/**************************************************************************************************/
-/*****************************    FORMAT GUESSING     ******************************************/
-/**************************************************************************************************/
-Sequence_data_struc *read_data_structure ( char *in_format, char *in_file,     Action_data_struc  *RAD) 
-         
-        {
-       Sequence_data_struc *D;
-       char **seq_name=NULL, **sequences=NULL;
-       int nseq=0, a;
-
-       
-       D=vcalloc ( 1, sizeof (Sequence_data_struc));
-       
-
-       if (!in_file[0])return NULL; 
-       if (!in_format[0])
-         {
-           in_format=identify_seq_format(in_file);
-         }
-       if (!in_format[0])return NULL;
-       
-
-
-       D->A=declare_Alignment(NULL);                 
-       if ( RAD->keep_case)(D->A)->residue_case=KEEP_CASE;
-       
-       D->rm_gap=RAD->rm_gap;
-       sprintf ( D->format, "%s", in_format);
-       sprintf ( D->file, "%s", in_file);
-       
-
-       
-
-       if ( strm2(in_format,"saga_aln","clustal_aln"))
-               {
-               read_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               
-               }
-               
-       else if ( strm (in_format, "treefile_list"))
-         {
-
-           D->S=get_tree_file_list(in_file);
-           D->A=seq2aln(D->S, D->A,NO_PAD);
-         }
-       else if ( strm (in_format, "file_list") || strm (in_format, "list"))
-         {
-           D->S=get_file_list(in_file);
-           D->A=seq2aln(D->S, D->A,KEEP_GAP);
-         }
-       else if ( strm (in_format, "fasta_tree"))
-         {
-
-           D->S=get_fasta_tree (in_file, NULL);
-           D->A=seq2aln(D->S, D->A,NO_PAD);
-          
-         }
-       else if ( strm (in_format, "tree_list") || strm (in_format, "treelist"))
-         {
-           char **line;
-           FILE *seq;
-           int n=0;
-           char *seq_file;
-           FILE *fp;
-
-           seq_file=vtmpnam(NULL);
-           seq=vfopen (seq_file, "w");
-           line=file2lines (in_file);
-           fp=vfopen (seq_file, "w");
-           for ( n=1; n<atoi(line[0]); n++)
-             {
-               fprintf ( fp, ">Tree_%d\n%s\n", n,line[n]);
-             }
-           vfclose (fp);
-           
-           free_char (line, -1);
-           return read_data_structure ( "fasta_tree",seq_file,RAD); 
-         }
-       
-       else if (strm (in_format, "matrix"))
-         {
-           D->M=read_matrice (in_file);
-         }
-       else if (strm4 (in_format, "newick_tree", "newick", "nh", "new_hampshire"))
-         {
-           D->T=main_read_tree (in_file);
-           D->S=tree2seq(D->T, NULL);
-           D->A=seq2aln (D->S,D->A, 0); 
-         }
-       else if (strm (in_format, "blast_aln"))
-               {
-                 if (read_blast_aln (in_file, D->A))
-                 {
-                   D->S=aln2seq(D->A);
-                 }
-               else
-                 {
-                   return NULL;
-                 }
-               }
-       else if ( strm( in_format,"number_aln"))
-               {               
-               read_number_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               }
-       else if ( strm( in_format,"stockholm_aln"))
-               {               
-               read_stockholm_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               }
-       else if ( strm( in_format,"gotoh_aln"))
-               {               
-               read_gotoh_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               }
-       
-       else if ( strm ( in_format, "msf_aln"))
-               {
-               read_msf_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               }
-       else if ( strm ( in_format, "amps_aln"))
-               {
-               read_amps_aln (in_file, D->A);
-               D->S=aln2seq(D->A);
-               }
-       else if ( strm (in_format, "excel_seq"))
-               {               
-                 D->S=perl_reformat2fasta ("excel2fasta.pl",in_file);
-                 (D->S)->contains_gap=0;
-                 D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }
-       else if ( strm (in_format, "pavie_seq"))
-               {               
-                 D->S=perl_reformat2fasta ("pavie2fasta.pl",in_file);
-                 (D->S)->contains_gap=0;
-                 D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }
-       else if ( strncmp (in_format, "perl_",5 )==0)
-               {               
-                 D->S=perl_reformat2fasta (in_format+5,in_file);
-                 (D->S)->contains_gap=0;
-                 D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }
-       else if ( strm (in_format, "number_fasta"))
-               {               
-               D->S=get_fasta_sequence_num (in_file, NULL);
-               (D->S)->contains_gap=0;
-               D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }       
-       else if ( strm (in_format, "raw_fasta"))
-               {               
-               D->S=get_fasta_sequence_raw (in_file, NULL);
-               (D->S)->contains_gap=0;
-               D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }       
-
-       else if ( strm2 (in_format, "fasta_aln", "fasta_seq"))
-               {
-               
-               D->S=get_fasta_sequence (in_file, NULL);
-               if ( strcmp (in_format, "fasta_aln")==0)(D->S)->contains_gap=0;
-               D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }       
-       else if ( strm (in_format, "fasta_tree"))
-               {
-               
-               D->S=get_fasta_tree (in_file, NULL);
-               D->A=seq2aln(D->S, D->A, NO_PAD);
-               }       
-       
-       else if ( strm (in_format, "pdb") || strm (in_format, "pdb_struc"))
-               {
-                   D->S=get_pdb_sequence (in_file);
-                   if ( D->S==NULL)
-                     {
-                       add_warning (stderr, "FAILED TO find PDB File %s", in_file);
-                       myexit (EXIT_FAILURE);
-                     }
-                   D->A=seq2aln(D->S, D->A,RAD->rm_gap);
-               }
-       else if ( strm2(in_format, "pir_seq", "pir_aln"))
-               {
-               D->S=get_pir_sequence ( in_file,NULL );
-               seq2aln(D->S, D->A, RAD->rm_gap);
-               }
-        else if ( strm(in_format, "gor_seq") )
-               {
-               D->S=get_gor_sequence ( in_file,NULL );
-               seq2aln(D->S, D->A, RAD->rm_gap);
-               }
-       else if ( strm2 ( in_format, "dali_aln", "dali_seq"))
-               {
-               D->S=get_sequence_dali ( in_file);
-               seq2aln(D->S, D->A, RAD->rm_gap);
-               }
-       else if ( strm (in_format, "barton_list_tc"))
-               {
-               get_barton_list_tc_seq ( in_file);
-               }
-       else if ( strm (in_format, "amps_sd_scores"))
-               {
-               D->W=get_amps_sd_scores ( in_file);
-               }
-       
-       else if ( strm ( in_format, "pima_aln"))
-               {
-               D->S=get_pima_sequence ( in_file);
-               seq2aln (D->S, D->A, RAD->rm_gap);
-               }
-       else if ( strm( in_format, "gor_struc"))
-               {
-               D->S=get_struc_gor ( in_file);
-               seq2aln(D->S, D->A, RAD->rm_gap);
-               }
-       else if ( strm( in_format, "dialign_aln"))
-               {
-               D->S=get_dialign_sequence ( in_file);
-               seq2aln (D->S, D->A, RAD->rm_gap);
-               }
-       else if ( strm( in_format, "tc_lib") ||  strm( in_format, "mocca_lib") ||  strm( in_format, "lib"))
-               {
-                 read_seq_in_list (in_file,&nseq,&sequences,&seq_name); 
-                 D->S=fill_sequence_struc ( nseq, sequences, seq_name);
-                 D->CL=declare_constraint_list ( D->S,NULL, NULL, 0,NULL, NULL); 
-                 D->CL=read_constraint_list_file(D->CL,in_file);
-                 seq2aln (D->S, D->A, RAD->rm_gap);
-                 free_char (sequences,-1);
-                 free_char (seq_name, -1);
-               }
-       else if ( strm( in_format,"swissprot_seq"))
-               {
-                 D->S=get_swissprot_sequence ( in_file,NULL);
-                 seq2aln (D->S, D->A, RAD->rm_gap);
-               }
-       else if  (strm (in_format, "alifold"))
-         {
-           D->S=read_alifold ( in_file);
-           seq2aln (D->S, D->A,0);
-         }
-       else
-               {
-               return NULL; 
-               }
-
-       if ( D->A)
-         {
-           for ( a=0; a<(D->A)->nseq; a++)sprintf ( (D->A)->file[a], "%s", in_file);
-         }
-       if ( D->S)
-         {
-           for ( a=0; a<(D->A)->nseq; a++)sprintf ( (D->S)->file[a], "%s", in_file);
-         }
-       
-       return D;
-       }
-Sequence *read_sequences (char *name)
-{
-  return main_read_seq (name);
-}
-Alignment * alifold2aln  (char *file)
-{
-  Sequence *S;
-  S=read_alifold(file);
-  sprintf ( S->seq[0],"%s", S->seq[1]);
-  return seq2aln (S, NULL, 0);
-}
-Sequence  * read_alifold (char *file)
-{
-  Sequence *S;
-  char **list;
-  int l;
-  S=declare_sequence (1,count_n_char_in_file (file),2);
-  list=file2lines (file);
-  
-  S->seq[0]=list[1];
-  S->seq[1]=list[2];
-  substitute (S->seq[0], "\n", "\0");
-  substitute (S->seq[0], " ", "\0");
-  substitute (S->seq[0], "_", STOCKHOLM_STRING);
-  l=strlen (S->seq[0]);
-  substitute (S->seq[1], "\n", "\0");
-  substitute (S->seq[1], " ", "\0");
-  substitute (S->seq[1], ".", STOCKHOLM_STRING);
-  S->seq[1][l]='\0';
-  sprintf (S->name[0], "cons");
-  sprintf (S->name[1], "#=GC SS_cons");
-  return S;
-}
-
-  
-  
-
-  
-  
-Sequence  * main_read_seq ( char *name)
-       {
-       char *format=NULL;
-       Sequence *S=NULL;
-       Alignment *A=NULL;
-       int a;
-
-
-       format=identify_seq_format (name);
-       
-
-       if ( getenv4debug ("DEBUG_REFORMAT"))fprintf ( stderr, "\n\nFormat %s\n", format); 
-
-       
-       if (format &&strm(format, "fasta_seq"))        
-        {
-          S= get_fasta_sequence ( name, NULL);
-        }
-       else if (format &&strm(format, "pir_seq"))     S= get_pir_sequence ( name, NULL);
-       else if (format &&strm(format,"swissprot_seq"))S= get_swissprot_sequence (name, NULL); 
-       else if (format && strstr (format, "aln")) 
-        {
-          A=main_read_aln ( name, NULL);
-          S=aln2seq(A);
-          ungap_seq(S);
-          free_aln(A);
-        }
-       else if ( format && strstr (format, "tc_lib"))
-        {
-          int nseq,b;
-          char **sequences=NULL, **seq_name=NULL;
-          
-          read_seq_in_list (name,&nseq,&sequences,&seq_name);             
-          S=fill_sequence_struc ( nseq, sequences, seq_name);
-          for ( b=0; b< S->nseq; b++)sprintf ( S->file[b], "%s",name);
-          free_char (seq_name, -1);free_char (sequences, -1);
-        }
-       else
-         {
-         /*Use The ClustalW routine*/
-           S=cw_read_sequences (name);
-         }
-       
-       for ( a=0; a<S->nseq; a++)sprintf ( S->file[a], "%s", name);
-       vfree(format);
-       ungap_seq(S);
-       S=clean_sequence ( S);
-       return S;
-       }
-
-Alignment * main_read_aln ( char *name, Alignment *A)
-       {
-       int a;
-
-       static char *format;
-       Sequence *S=NULL;
-       Sequence *IN_SEQ;
-      
-       if ( !name)return NULL;
-       else if (!check_file_exists(name))
-        {
-          if ( !check_file_exists (name+1))return NULL;
-          else if ( name[0]=='A') name++;
-          else if ( name[0]=='S') name++;/*Line Added for the -convert flag of T-Coffee*/
-        }
-       
-
-       if (!A)A=declare_aln(NULL);
-       format=identify_seq_format (name);
-       
-       IN_SEQ=A->S;
-       
-       if      ((format && strm(format, "saga_aln" )) ||strm(format, "clustal_aln")||strm(format, "t_coffee_aln" ) )
-        {
-       
-          read_aln ( name, A);
-       
-        }
-       else if (format && strm (format, "conc_aln"))A=input_conc_aln (name,NULL);
-       else if (format &&strm(format, "msf_aln"  ))read_msf_aln ( name, A);
-       else if (format &&strm(format, "blast_aln"))read_blast_aln (name, A);
-       else if (format &&(strm(format, "fasta_aln")))
-                {
-                 
-                 
-               S=get_fasta_sequence ( name, NULL);
-               
-               S->contains_gap=0;
-               seq2aln (S, A, 0);              
-               }
-       else if (format &&strm(format, "pir_aln"))
-                {
-               S=get_pir_sequence ( name, NULL);
-               S->contains_gap=0;
-               seq2aln (S, A, 0);
-               } 
-       else if (format && strm(format, "fasta_seq") && A)
-          {
-          S=get_fasta_sequence ( name, NULL);
-          
-          for ( a=1; a<S->nseq; a++)if ( strlen (S->seq[a-1])!=strlen (S->seq[a])){free_sequence (S, S->nseq); free_aln (A); return NULL;}
-          S->contains_gap=0;
-          seq2aln (S, A, 0);
-          }
-
-       else if (format && strm(format, "pir_seq") && A)
-          {
-          S=get_pir_sequence ( name, NULL);
-         
-          for ( a=1; a<S->nseq; a++)if ( strlen (S->seq[a-1])!=strlen (S->seq[a])){free_sequence (S, S->nseq); free_aln (A); return NULL;}
-          S->contains_gap=0;
-          seq2aln (S, A, 0);
-          }
-       else
-          {
-             free_aln(A);
-             return NULL;        
-         }
-
-     
-        if ( check_list_for_dup( A->name, A->nseq))
-          {
-             fprintf ( stderr, "\nWARNING (main_read_aln): %s is duplicated in File %s ", check_list_for_dup( A->name, A->nseq), A->file[0]);
-             A=aln2unique_name_aln(A);
-         }
-     
-       if (IN_SEQ)A->S=IN_SEQ;
-       else if (!A->S){A->S=aln2seq(A);}
-       
-       A->S=ungap_seq(A->S);
-       A=fix_aln_seq(A, A->S);     
-       compress_aln (A);
-       for ( a=0; a< A->nseq; a++) sprintf ( A->file[a], "%s", name);
-       
-       A=clean_aln (A);
-       return A;
-       }
-
-
-char * identify_aln_format ( char *file)
-       {
-       /*This function identify known sequence and alignmnent formats*/
-        return identify_seq_format (file);
-       }
-char * identify_seq_format ( char *file)
-       {
-       char *format=NULL;
-       /*This function identify known sequence and alignmnent formats*/
-    
-       if ( format==NULL)format=vcalloc ( 100, sizeof (char));
-       else format[0]='\0';
-       
-
-       
-       if ( !check_file_exists(file))
-        {
-          fprintf (stderr, "ERROR: %s Does Not Exist [FATAL:%s]\n",file, PROGRAM);
-          myexit (EXIT_FAILURE);
-        }
-       else if ( is_stockholm_aln (file))sprintf (format, "stockholm_aln");
-       else if ( is_blast_file (file))sprintf ( format, "blast_aln");      
-       else if ( is_pdb_file(file))sprintf ( format, "pdb_struc");  
-       else if ( format_is_msf      (file))sprintf ( format, "msf_aln");
-       else if ( format_is_fasta_seq(file))sprintf ( format, "fasta_seq");
-       else if ( format_is_fasta_aln(file))sprintf ( format, "fasta_aln");       
-       else if ( format_is_pir_aln  (file))sprintf ( format, "pir_aln");
-       else if ( format_is_pir_seq  (file))sprintf ( format, "pir_seq");
-       else if ( format_is_oligo    (file))sprintf ( format, "oligo_aln");
-       else if ( format_is_swissprot     (file))sprintf ( format, "swissprot_seq");
-       else if ( format_is_saga     (file))sprintf ( format, "clustal_aln");
-       else if ( format_is_conc_aln (file))sprintf ( format, "conc_aln");
-       else if ( is_lib (file))sprintf ( format, "tc_lib");
-       else if ( is_lib_02 (file))sprintf ( format, "tc_lib_02");
-       else if ( is_newick(file))sprintf ( format, "newick_tree");
-       else 
-        {
-          //add_warning ( stderr, "\nThe Format of File: %s was not recognized [SERIOUS:%s]",file, PROGRAM);
-          ;
-        }
-       return format;
-       }
-char **identify_list_format ( char **list, int n)
-       {
-          int a;
-          char *name;
-          char *string;
-          char mode;
-       
-
-          
-          declare_name (name);
-          for ( a=0; a< n; a++)
-              {
-                
-                sprintf (name, "%s", list[a]);
-                string=list[a];
-                if ((mode=identify_format ( &string))!='?')
-                  {
-                      sprintf ( name, "%s", string);
-                      sprintf ( list[a], "%c%s", mode,name);
-                  }
-              else
-                  {
-                      fprintf ( stderr, "\nERROR: %s not recognised [FATAL:%s]", name, PROGRAM);
-                  }
-            
-              }
-          
-          vfree(name);
-          return list;
-       }
-              
-char * name2type_name ( char *name)
-{
-  /*turns <file> into <Sfile>, <Afile>...*/
-  char *new_name;
-  char mode;
-  
-  new_name=vcalloc ( strlen (name)+2, sizeof (char));
-  sprintf ( new_name, "%s", name);
-  if (is_in_set (name[0], "ALSMXPRW") && !check_file_exists(name))
-    {
-      sprintf ( new_name, "%s", name);
-    }
-  else
-    {
-      mode=identify_format (&new_name);
-      sprintf ( new_name, "%c%s", mode,name);
-    }
-  return new_name;
-}         
-
-char identify_format (char **fname)
-       {
-          char mode='?';
-          mode=fname[0][0];
-          
-          if ((is_in_set (mode, "ALMSPR") && check_file_exists(fname[0]+1)) ||(mode=='X' && is_matrix ( fname[0]+1)) ||(mode=='M' && is_method(fname[0]+1)) )
-            {
-              
-              fname[0]++;
-            }
-          else if (mode=='W' && !check_file_exists(fname[0])){fname[0]++;}
-          else
-              {
-                  
-                /*WARNING: Order matters => internal methods can be confused with files, must be checked last*/
-                      if (is_lib(fname[0]))mode='L';
-                     else if (is_pdb_file(fname[0]))mode='P';
-                     else if (is_seq(fname[0]))mode='S';
-                     else if (is_aln(fname[0]))mode='A';
-                     else if (is_matrix(fname[0]))mode='X';
-                     else if (is_method(fname[0]))mode='M';                  
-                     else mode='?';
-                 }
-          return mode;
-       }
-
-
-
-int is_pdb_name ( char *name)
-    {
-      char command[1000];
-      int result;
-      char *result_file;
-      static char **buf_names;
-      static int   *buf_result;
-      static int   nbuf;
-      FILE *fp;
-
-      
-      /*Use the look up*/
-      if ( !buf_names)
-       {
-         buf_names=declare_char (1000, 100);
-         buf_result=vcalloc (1000, sizeof (int));
-       }
-      if ( (result=name_is_in_list ( name, buf_names,nbuf,100))!=-1)return buf_result[result];
-      
-      
-
-      result_file=vtmpnam (NULL);
-   
-      sprintf ( command, "extract_from_pdb -is_pdb_name \'%s\' > %s", name, result_file);
-      if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:is_pdb_name] %s\n", command);
-      my_system ( command);
-      
-      fp=vfopen ( result_file, "r");
-      fscanf ( fp, "%d", &result);
-      vfclose (fp);
-      vremove ( result_file);
-      
-      sprintf ( buf_names[nbuf], "%s", name);
-      result=buf_result[nbuf++]=(result==1)?1:0;
-
-      return result;
-      
-    }
-
-char*  get_pdb_id ( char *file)
-{
-  /*receives the name of a pdb file*/
-  /*reads the structure id in the header*/
-  /*returns the pdb_id*/
-  char *tmp_name;
-  char command[10000];
-  char cached [1000];
-  char fname[1000];
-  FILE *fp;
-  char *id;
-  char buf[1000];
-
-
-  tmp_name=vtmpnam(NULL);
-  
-  sprintf ( cached, "%s/%s", get_cache_dir(),file);
-  if ( check_file_exists(cached))sprintf ( fname, "%s", cached);
-  else sprintf ( fname, "%s", file);
-
-  sprintf ( command, "extract_from_pdb -get_pdb_id %s > %s",fname, tmp_name);
-  
-  if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:get_pdb_id] %s\n", command);
-  my_system ( command);
-  
-  buf[0]='\0';
-  fp=vfopen (tmp_name, "r");
-  fscanf ( fp, "\n%s\n", buf);  
-  vfclose (fp);
-
-  if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:get_pdb_id]DONE\n");
-  
-  id=vcalloc ( strlen (buf)+1, sizeof (char));
-  sprintf ( id, "%s", buf);
-  
-  
-
-  return id;  
-}
-    
-  
-char*  get_pdb_struc(char *in_name, int start, int end)
-    {
-      char *name1,*name2;
-      char command[LONG_STRING];
-      char *name;
-
-      
-      
-
-      name=vcalloc ( STRING, sizeof (char));
-      sprintf ( name, "%s", in_name);
-     
-      if ( (name1=is_pdb_struc(name))==NULL && (name[0]=='P' && ((name1=is_pdb_struc (name+1))==NULL)))
-       {
-         fprintf ( stderr, "\nERROR Could not download structure %s [FATAL:%s]\n", name, PROGRAM);crash("");
-       }
-      else if ( (start==0) && (end==0))return name1;
-      else
-       {
-         declare_name(name2);
-         sprintf ( name2, "%s_%d_%d.pdb", name, start, end);
-         sprintf ( command, "extract_from_pdb -infile \'%s\' -chain FIRST -coor %d %d > %s%s",check_file_exists(name1),start, end, get_cache_dir(),name2);
-         if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:get_pdb_struc] %s\n", command);
-         my_system (command);
-
-         if ( is_pdb_file(name2))return name2;
-         else
-           {
-             fprintf ( stderr, "\nERROR Could not extract segment [%d %d] from structure %s [FATAL:%s]\n",start, end, name, PROGRAM);crash("");
-           }
-         myexit (EXIT_FAILURE);
-       }
-
-      return NULL;
-    }
-
-char*  seq_is_pdb_struc ( Sequence *S, int i)
-{
-  
-  if (!S){return NULL;}
-  else if ( !S->T[i]){return NULL;}
-  else if ( !((S->T[i])->P)){return NULL;}
-  else return ((S->T[i])->P)->template_file;
-}
-char*  is_pdb_struc ( char *name)
-   {
-     /*Receives a name
-       checks if this is the name of a local file that contains PDB data
-       checks if this is the name of a file from a local db
-                                            put the file in the cache
-       checks if this is a file from a remote db (extract_from_pdb
-       return NULL if everything fails
-     */
-
-     static char *file_name1;
-     static char *file_name2;
-          
-     static char **buf_names;
-     static char **buf_result;
-     static int   nbuf, s;
-    
-     
-     char *r=NULL;
-     char command[1000];
-     
-
-     if ( !name || name[0]=='\0')return NULL;
-       
-
-     /*Use the look up*/
-     if ( !buf_names)
-       {
-
-         buf_names=vcalloc ( 1000, sizeof (char*));
-         buf_result=vcalloc ( 1000, sizeof (char*));
-         file_name1=vcalloc ( 1000, sizeof (char));
-         file_name2=vcalloc ( 1000, sizeof (char));
-       }
-     if ( (s=name_is_in_list ( name, buf_names,nbuf,-1))!=-1)return buf_result[s];
-      
-
-     r=NULL;
-     sprintf ( file_name1, "%s", name);
-     sprintf ( file_name2, "%s.pdb", name);
-     
-     
-     if (is_pdb_file(file_name1)){r=file_name1;}
-     else if (is_pdb_file(file_name2)){r=file_name2;}
-     else if (is_pdb_name (name))
-       {
-        printf_system ("extract_from_pdb -netfile \'%s\' > %s/%s 2>/dev/null",name, get_cache_dir(), file_name2);
-        if ( is_pdb_file(file_name2))r=file_name2; 
-        else r=NULL;    
-        
-       }
-     
-
-      /*Fill the buffer*/
-     buf_names[nbuf]=vcalloc ( strlen (name)+1, sizeof (char)); 
-     sprintf ( buf_names[nbuf], "%s", name);
-     if ( r)
-       {
-        buf_result[nbuf]=vcalloc ( strlen (r)+1, sizeof (char));
-        sprintf (buf_result[nbuf], "%s", r);
-       }
-     else buf_result[nbuf]=NULL;      
-     nbuf++;
-
-     return r;
-   }
-
-char *fix_pdb_file ( char *in)
-{
-  char *empty;
-  
-  empty=vcalloc(1, sizeof(char));
-
-  if ( !in || !check_file_exists (in))return empty;
-  else if ( is_pdb_file(in))return in;
-  else
-    {
-      char command[10000];
-      char *tmp;
-      char *tmp2;
-      tmp=vtmpnam (NULL);
-      tmp2=vcalloc (strlen (tmp)+1, sizeof (char));
-      sprintf (tmp2, "%s", tmp);
-      sprintf ( command, "extract_from_pdb %s > %s", check_file_exists(in), tmp2);
-      my_system (command);
-      if ( is_pdb_file (tmp))return tmp2;
-      else return empty;
-
-    }
-}
-
-int is_sap_file ( char *name)
-       {
-       FILE *fp;
-       if (!name);
-       if (!check_file_exists(name))return 0;
-       
-       if ((fp=find_token_in_file (name, NULL, "Percent"))!=NULL)
-         {
-           if ((fp=find_token_in_file (name,fp, "Percent"))!=NULL)
-             {
-               vfclose (fp);
-               return 1;
-             }
-           else
-             { 
-               return 0;
-             }
-         }
-       else
-         {
-           return 0;
-         }
-       }
-
-
-int is_blast_file ( char *name)
-       {
-        if ( !check_file_exists(name) ) return 0;
-        else if (token_is_in_file (name, "<SequenceSimilaritySearchResult>"))
-          {
-            return BLAST_XML;
-          }
-        else
-          {
-            if (token_is_in_file (name, "Lambda") && token_is_in_file (name, "Altschul,"))
-              {
-                return BLAST_TXT;
-              }
-            else
-              {
-                return 0;
-              }
-          }
-        return 0;
-       }
-int is_simple_pdb_file ( char *name)
-{
-  FILE *fp;
-  if ((fp=find_token_in_file (name, NULL, "SIMPLE_PDB_FORMAT"))!=NULL){vfclose (fp);return 1;}
-  return 0;
-}
-
-
-int is_pdb_file ( char *name)
-       {
-        FILE *fp;
-        int ispdb=0;
-        
-        if ( name==NULL) return 0;
-        if (!check_file_exists (name))return 0;
-        
-        if ((fp=find_token_in_file (name, NULL, "\nHEADER"))!=NULL)
-           {vfclose (fp);
-            ispdb++; 
-          }
-        if ((fp=find_token_in_file (name, NULL, "\nSEQRES"))!=NULL)
-           {
-            vfclose (fp);
-            ispdb++;
-          }
-        
-        if ((fp=find_token_in_file (name, NULL, "\nATOM"))!=NULL)
-          {
-            vfclose (fp);
-            ispdb++;
-          }
-        else
-          {
-            ispdb=0;
-          }
-        
-        
-        if ( ispdb>=2)return 1;
-        else return 0;
-       }
-int is_seq ( char *name)
-       {
-        char *format;
-
-        if ( !check_file_exists(name))return 0;
-        
-        format= identify_seq_format(name);
-        if(!format || format[0]=='\0'){vfree (format);return 0;}
-        else if (strstr(format, "seq")){vfree (format);return 1;}
-        else return 0;
-       }
-int is_aln ( char *name)
-       {
-       char *format;    
-       if ( !check_file_exists       (name))return 0;   
-       
-       format= identify_seq_format(name);
-       if ( !format || format[0]=='\0'){vfree (format);return 0;}
-       else if (strstr(format, "aln")){vfree (format); return 1;}
-       else return 0;
-       }   
-
-int is_matrix (char *name)
-       {
-       int **m;
-       
-       if ((m=read_matrice (name))!=NULL){free_int (m, -1); return 1;}
-       return 0;                     
-       }
-int is_newick (char *name)
-   {
-     int c;
-     FILE *fp;
-     
-
-     fp=vfopen (name, "r");
-     if ( (c=fgetc(fp))!='('){vfclose (fp); return 0;}
-
-
-     while ( (c=fgetc(fp))!=EOF)
-       {
-        if ( c==';'){vfclose (fp); return 1;}
-       }
-     vfclose (fp);
-     return 0;
-   }
-
-int is_clustalw_matrix ( char *name)
-{
-       
-  FILE *fp;
-
-
-       if ( (fp=find_token_in_file (name, NULL, "CLUSTALW_MATRIX"))!=NULL){vfclose(fp);return 1;}
-       else return 0;
-}
-int is_pavie_matrix ( char *name)
-{
-       
-  FILE *fp;
-
-
-       if ( (fp=find_token_in_file (name, NULL, "PAVIE_MATRIX"))!=NULL){vfclose(fp);return 1;}
-       else return 0;
-}
-int is_distance_matrix_file (char *name)
-{
-  FILE *fp;
-  if ( (fp=find_token_in_file (name, NULL, "TC_DISTANCE_MATRIX_FORMAT_01"))!=NULL){vfclose(fp);return 1;}
-  else return 0;
-}  
-int is_similarity_matrix_file (char *name)
-{
-  FILE *fp;
-  if ( (fp=find_token_in_file (name, NULL, "TC_SIMILARITY_MATRIX_FORMAT_01"))!=NULL){vfclose(fp);return 1;}
-  else return 0;
-}  
-int is_blast_matrix ( char *name)
-{
-       
-  FILE *fp;
-
-
-  if ( (fp=find_token_in_file (name, NULL, "BLAST_MATRIX"))!=NULL){vfclose(fp);return 1;}
-       else return 0;
-}
-
-int is_single_seq_weight_file ( char *name)
-{
-  
-  return token_is_in_file ( name, "SINGLE_SEQ_WEIGHT_FORMAT_01");
-  
-}
-int is_stockholm_aln (char *file)
-{
-  FILE *fp;
-  
-  if ((fp=find_token_in_file_nlines (file, NULL, "STOCKHOLM",2)))
-    {
-      vfclose (fp);
-      return 1;
-    }
-  return 0;
-}
-
-int is_lib ( char *name)
-{
-  return is_lib_01(name);
-}
-
-int is_lib_02 ( char *name)
-{
-  
-  return token_is_in_file ( name, "TC_LIB_FORMAT_02");
-  
-}
-
-int is_lib_01 (char *name)
-       {
-
-        
-        if ( token_is_in_file ( name, "TC_LIB_FORMAT_01")) return 1;
-        else if (token_is_in_file ( name, "T-COFFEE_LIB_FORMAT_01"))return 1;
-        else if (token_is_in_file (name, "SEQ_1_TO_N"))return 1;
-        else return 0;
-       }
-int is_lib_list ( char *name)
-{
-  if ( !check_file_exists (name))return 0;
-  if ( token_is_in_file ( name, "TC_LIB_LIST_FORMAT_01")) return 1;
-  return 0;
-}
-int is_method ( char *file)
-    {
-       char new_file[200];
-
-       
-       sprintf ( new_file, "%s", file);
-       if ( (token_is_in_file(new_file, "TC_METHOD_FORMAT_01"))){return 1;}
-       if ( is_in_pre_set_method_list(new_file)) 
-           {
-       
-               vremove ( new_file);
-               return 1;
-           }
-       else
-         {
-       
-           return 0;
-         }
-    }
-
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                              SEQUENCE FORMAT IDENTIFIERS                                */
-/*                                                                                         */
-/***************************************************************************************** */
-int type_is_exon_boundaries(char **seq, int n)
-{
-  int a, l, b;
-  for (a=0; a<n; a++)
-    {
-      l=strlen (seq[a]);
-      for (b=0; b<l; b++)
-       if ( strchr ("bojBOJ", seq[a][b]))return 1;
-    }
-  return 0;
-}
-
-int format_is_oligo(char *file)
-    { 
-    char *buf=NULL;
-    FILE *fp;
-    int r=0;
-    
-    fp=vfopen ( file, "r");
-    buf=vfgets(buf,fp);
-    vfclose ( fp);
-    
-
-    if ( strm (buf, "ALPHABET"))r=1;
-    
-    vfree (buf);
-    
-    return r;
-    }
-int format_is_msf ( char *file)
-    {
-    char buf[1000];
-    FILE *fp;
-
-   
-    
-    if ( (fp=find_token_in_file_nlines (file,NULL,"MSF:", 30))!=NULL){vfclose (fp);return 1;}
-    else
-      {
-       return 0;
-      }
-    
-    fp=vfopen ( file, "r");
-    fscanf (fp , "%s", buf);
-    vfclose ( fp);
-
-    if ( strm (buf, "MSF:"))return 1;
-    return 0;
-    }
-
-//Fasta and PIR
-int format_is_fasta_aln ( char *file)
-
-    {
-      if ( format_is_fasta(file) && !format_is_fasta_seq(file))return 1;
-      else return 0;
-    }
-
-
-int format_is_fasta_seq  ( char *file)
-    {
-      int a, l1, l2,l;
-      Sequence *S;
-
-      if ( format_is_fasta (file))
-       {       
-       S=get_fasta_sequence (file, NULL);
-       if (!S) return 0;
-       else if ( !S->seq[0]){free_sequence (S, S->nseq); return 1;}
-       l=strlen ( S->seq[0]);
-       for ( a=0; a< S->nseq; a++)if(strlen(S->seq[a])!=l){free_sequence (S, S->nseq);return 1;}
-       for ( a=0; a< S->nseq; a++)
-         {
-           l1=strlen ( S->seq[a]);
-           ungap (S->seq[a]);
-           l2=strlen ( S->seq[a]);
-           if ( l1!=l2)
-             {
-               free_sequence (S, S->nseq);
-               return 0;
-             }
-         }
-       free_sequence (S, S->nseq);
-       return 1;
-      }
-    else
-      {
-       return 0;
-      }
-    }
-
-int format_is_fasta ( char *file)
-    {
-      Sequence *S;
-      
-      if ( !check_file_exists(file))return 0;
-
-      if ( get_first_non_white_char (file)!='>')return 0;
-      if ( !(S=get_fasta_sequence (file, NULL)))return 0;
-      free_sequence (S, -1);
-      if ( format_is_pir(file)) return 0;
-      return 1;
-    }
-
-int format_is_pir_aln ( char *file)
-
-    {
-      if ( format_is_pir(file) && !format_is_pir_seq(file))return 1;
-      else return 0;
-    }
-
-int format_is_pir_seq ( char *file)
-    {
-      int a, l1, l2;
-      Sequence *S;
-
-      
-    if ( format_is_pir (file))
-      {
-       S=get_pir_sequence (file, NULL);
-       for ( a=0; a< S->nseq; a++)
-         {
-           l1=strlen ( S->seq[a]);
-           ungap (S->seq[a]);
-           l2=strlen ( S->seq[a]);
-           if ( l1!=l2)
-             {
-               free_sequence (S, S->nseq);
-               return 0;
-             }
-         }
-       return 1;
-      }
-    else
-      {
-       return 0;
-      }
-    }
-    
-
-int format_is_pir ( char *file)
-    {
-      Sequence *S;
-      int pir_name=1, star_end=1, a;
-      
-      S=get_fasta_sequence (file, NULL);
-      if (!S)return 0;
-      else if (!S->seq[0])return 0;
-      
-      pir_name=1; star_end=1;
-      for (a=0; a< S->nseq; a++)
-       {
-         int l;
-         if (!is_pir_name(S->name[a]))pir_name=0;
-         l=strlen (S->seq[a]);
-         if (!l || (l && S->seq[a][l-1]!='*'))
-           star_end=0;
-       }
-      free_sequence(S,-1);
-      if ( pir_name && star_end) return 1;
-      else return 0;
-    }
-int is_pir_name (char *name)
-{
-  if ( strstr (name, "P1;"))return 1;
-  if ( strstr (name, "F1;"))return 1;
-  if ( strstr (name, "DL;"))return 1;
-  if ( strstr (name, "DC;"))return 1;
-  if ( strstr (name, "RL;"))return 1;
-  if ( strstr (name, "RC;"))return 1;
-  if ( strstr (name, "XX;"))return 1;
-  return 0;
-}
-  
-  
-int format_is_conc_aln (char *file)
-{
-  FILE *fp;
-  if ( (fp=find_token_in_file (file, NULL, "CONC_MSF_FORMAT_01"))){vfclose (fp); return 1;}
-  return 0;
-}
-int format_is_saga ( char *file) 
-    {
-    FILE *fp;
-    int **list;
-    int n_blocks;
-    int n_seq;
-    int a, b;
-    
-    if ( (fp=find_token_in_file (file, NULL, "SAGA"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "CLUSTAL"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "ClustalW"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "clustalw"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "clustal"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "T-COFFEE_MSA"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "INTERLEAVED_MSA"))){vfclose (fp); return 1;}
-    
-    else return 0;
-    
-    if (1==1);
-    else if  ((fp=find_token_in_file (file, NULL, "T-COFFEE"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "SAGA_FORMAT"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "GARP"))){vfclose (fp); return 1;}
-    else if  ((fp=find_token_in_file (file, NULL, "INTERLEAVED"))){vfclose (fp); return 1;}
-    
-    else 
-       {
-          list=get_file_block_pattern (file,&n_blocks,100); 
-          if (n_blocks<=2){free_int (list, -1);return 0;}
-          else 
-              {                  
-              n_seq=list[1][0];
-              for ( a=1; a< n_blocks-1; a++)
-                  {
-                      if ( list[a][0]!=n_seq){free_int (list, -1);return 0;}
-                      else
-                      {
-                          for ( b=1; b<=list[a][0]; b++)
-                              if ( list[a][b]!=2){free_int (list, -1);return 0;}
-                      }
-                  }
-              }
-          return 1;
-       }
-    
-    return 0;
-    }
-
-
-int format_is_swissprot (char *name)
-    {
-      FILE *fp;
-      
-      if ( !check_file_exists(name))return 0;
-        
-        
-   
-    
-      if (   (fp=find_token_in_file_nlines (name,NULL,"\nID ",10))!=NULL\
-          &&(fp=find_token_in_file (name,NULL,"\nSQ "))!=NULL  )
-       {
-         
-         vfclose (fp);return 1;
-       }
-      else
-       {
-         return 0;
-       }
-    } 
-
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT STUFF                                              */
-/*                                                                                         */
-/***************************************************************************************** */              
-int output_format_aln ( char *format, Alignment *inA, Alignment *inEA,char *name)
-        {
-       Sequence_data_struc *D1=NULL;
-       Sequence_data_struc *D2=NULL;
-       Alignment *A=NULL;
-       Alignment *EA=NULL;
-       
-       
-       A =copy_aln (inA, NULL);
-       A->CL=inA->CL;
-       EA=copy_aln (inEA,NULL);
-       A =expand_aln(A);
-       EA=expand_number_aln(inA,EA);   
-       
-       
-       if (A && A->expanded_order  )A=reorder_aln ( A, A->expanded_order,A->nseq);  
-       if (EA && EA->expanded_order)EA=reorder_aln ( EA, EA->expanded_order,EA->nseq);  
-
-         
-        D1=vcalloc ( 1, sizeof (Sequence_data_struc));
-       D1->A=A;
-       if (EA)
-          {
-          D2=vcalloc ( 1, sizeof (Sequence_data_struc));
-          D2->A=EA;
-          }
-       
-       main_output ( D1, NULL,D2, format, name);
-       
-       vfree(D1);
-       vfree(D2);
-       free_aln (A);
-       free_aln (EA);
-       return 1;
-       }
-int main_output  (Sequence_data_struc *D1, Sequence_data_struc *D2, Sequence_data_struc *DST, char *out_format, char *out_file)
-
-       {  
-       FILE *fp;
-       int value;
-       Alignment *BUF_A;
-       int expanded=0;
-       
-       if ( !out_format[0])return 0;
-       if ( D1 && D1->rm_gap)ungap_aln ((D1->A));
-       
-       if ( (strstr (out_format, "expanded_")))
-         {
-           if (!D1) return 1;
-           out_format+=strlen ("expanded_");
-           BUF_A=copy_aln (D1->A, NULL);
-           (D1->A)=thread_profile_files2aln ((D1->A), NULL, NULL);
-           expanded=1;
-         }
-       
-       if ( strm (out_format, ""))return 0;
-       else if (    ( strm (out_format, "aln2lib")))
-         {
-           int a, b, c;
-           int r1,r2,s1, s2,s;
-           Constraint_list *CL;
-           FILE *fp;
-           Alignment *IN;
-           int **pos;
-           
-           if (!D1)return 1;
-           IN=D1->A;
-           CL=(D1->A)->CL;
-           pos=aln2pos_simple(IN, IN->nseq);
-           fp=vfopen (out_file, "w");
-           fp=save_list_header (fp,CL);
-           
-         
-           for ( b=0; b< IN->nseq-1; b++)
-             {
-               for ( c=b+1; c< IN->nseq; c++)
-                 {
-                   s1=IN->order[b][0];
-                   s2=IN->order[c][0];
-                   fprintf ( fp, "#%d %d\n", s1+1, s2+1);
-                   for ( a=0; a< IN->len_aln; a++)
-                     {
-                       r1=pos[b][a];
-                       r2=pos[c][a];
-
-                       if ( s1==s2 && !CL->do_self)continue;
-                       
-                       if ( s1< s2)s=(CL->evaluate_residue_pair)( CL, s1, r1, s2, r2);
-                       else        s=(CL->evaluate_residue_pair)( CL, s2, r2, s1, r1);
-                       
-                       s=(s!=UNDEFINED)?s:0;
-                       if ( r1>0 && r2>0)
-                         {
-                           fprintf (fp, "\t%5d %5d %5d \n", r1, r2, s);
-                         }
-                     }
-                 }
-             }
-            vfclose (save_list_footer (fp, CL));
-         }
-       else if      ( strncmp (out_format, "score",5)==0 || strm (out_format, "html"))
-               {
-                 Alignment *BUF;
-
-                 if (!D1)return 1;
-                 if ( !DST) 
-                   {
-                     fprintf ( stderr,"\n[You Need an evaluation File: Change the output format or use +evaluate][FATAL:%s]\n", PROGRAM);      
-                     myexit(EXIT_FAILURE);
-                   }
-                 if ( !strm ("html", out_format))while ( out_format[0]!='_' && out_format[0]!='\0' )out_format++;
-                 
-                 D1->S=aln2seq(D1->A);
-                 BUF=copy_aln (DST->A, NULL);
-                 DST->A=aln2number (DST->A);
-                 
-                 if     ( strstr ( out_format, "html"  ))output_reliability_html  ( D1->A,  DST->A, out_file);
-                 else if( strm ( out_format, "_ps"    ))output_reliability_ps    ( D1->A,  DST->A, out_file);
-                 else if( strm ( out_format, "_pdf"   ))output_reliability_pdf   ( D1->A,  DST->A, out_file);  
-                 else if( strm ( out_format, "_ascii" ))output_reliability_ascii ( D1->A,  DST->A, out_file);  
-                 else if( strm ( out_format, "_seq"   ))output_seq_reliability_ascii ( D1->A,  DST->A, out_file);
-                 else
-                   {
-                     DST->A=BUF;
-                     main_output (DST, NULL, NULL, out_format+1, out_file);
-                   }
-               }
-       else if (strm (out_format, "sec_html") || strm (out_format, "_E_html"))
-         {
-           Alignment *ST, *A;
-           Sequence *S;
-           
-           int a, b,c,i, ns=0;
-           char *buf;
-           if (!D1)return 1;
-           A=D1->A;
-           
-           
-           S=A->S;
-           ST=copy_aln (A, NULL);
-           for (a=0; a<ST->nseq; a++)
-             {
-               i=name_is_in_list (ST->name[a],S->name, S->nseq, 100);
-               if ( i!=-1)
-                 {
-                   buf=seq2E_template_string(S, i);
-                   if ( buf==NULL)continue;
-                   else ns++;
-                   for (c=0,b=0; b<ST->len_aln; b++)
-                     {
-                       int r1, s;
-                       r1=ST->seq_al[a][b];
-                       if ( r1!='-')
-                         {
-                           s=tolower (buf[c]);
-                           if (s=='e')r1='0';
-                           else if (s=='h')r1='9';
-                           else if (s=='c')r1='5';
-                           c++;
-                         }
-                       ST->seq_al[a][b]=r1;
-                     }
-                 }
-             }
-           
-           if (!ns)
-             {
-               add_warning ( stderr, "Cannot output tm_html:_E_ template file (sec. struc.) is required for this output ", PROGRAM);
-             }
-           output_color_html  ( A, ST, out_file);
-         }
-       else if (strm (out_format, "tm_html") || strm (out_format, "_T_html"))
-         {
-           Alignment *ST, *A;
-           Sequence *S;
-           
-           int a, b,c,i, ns=0;
-           char *buf;
-           if (!D1)return 1;
-           A=D1->A;
-           A->output_tm = 1;
-           
-           S=A->S;
-           ST=copy_aln (A, NULL);
-           for (a=0; a<ST->nseq; a++)
-             {
-               i=name_is_in_list (ST->name[a],S->name, S->nseq, 100);
-               if ( i!=-1)
-                 {
-                   buf=seq2T_template_string(S, i);
-                   if ( buf==NULL)continue;
-                   else ns++;
-                   for (c=0,b=0; b<ST->len_aln; b++)
-                     {
-                       int r1, s;
-                       r1=ST->seq_al[a][b];
-                       if ( r1!='-')
-                         {
-                           s=tolower (buf[c]);
-                           if (s=='o')r1='0';
-                           else if (s=='h')r1='9';
-                           else if (s=='i')r1='5';
-                           c++;
-                         }
-                       ST->seq_al[a][b]=r1;
-                     }
-                 }
-             }
-           
-           if (!ns)
-             {
-               add_warning ( stderr, "Cannot output tm_html:_T_ template file (trans. Memb. ) is required for this output ", PROGRAM);
-             }
-           output_color_html  ( A, ST, out_file);
-         }
-       
-       else if (strm (out_format, "color_exoset"))
-         {
-           Alignment *ST, *EX, *A;
-           Constraint_list *CL;
-           int a, b, n;
-           char *buf;
-           
-           if ( !DST->A)
-             {
-               printf_exit ( EXIT_FAILURE, stderr, "\nYou must provide an obj file via the -struc_in flag [FATAL:%s]", PROGRAM);
-             }
-           EX=DST->A;
-           A=D1->A;
-           
-           CL=declare_constraint_list ( DST->S,NULL, NULL, 0,NULL, read_matrice("pam250mt"));
-           
-           ST=copy_aln (A, NULL);
-           buf=vcalloc ( EX->len_aln+1, sizeof (int));
-           
-           for ( a=0; a< A->nseq; a++)
-             {
-               int i;
-                               
-               i=name_is_in_list (A->name[a],EX->name, EX->nseq, -1);
-               if ( i==-1)continue;
-                               
-               sprintf ( buf, "%s", EX->seq_al[i]);
-               ungap (buf);
-               
-               for (n=0,b=0; b<A->len_aln; b++)
-                 {
-                   if (!is_gap(A->seq_al[a][b]))
-                     {
-                       if ( buf[n]=='o')
-                         ST->seq_al[a][b]='0';
-                       else if ( buf[n]=='j')
-                         ST->seq_al[a][b]='1';
-                       else if ( buf[n]=='b')
-                         ST->seq_al[a][b]='2';
-                       n++;
-                     }
-                 }
-             }
-           vfree (buf);
-       
-           output_color_html  ( A, ST, out_file);
-           return EXIT_SUCCESS;
-         }
-       
-       else if (strm (out_format, "color_protogene"))
-         {
-           int n, a, b;
-           DST->A=copy_aln (D1->A, NULL);
-           for (n=1,a=0; a< (D1->A)->len_aln; a++, n++)
-             {
-               for ( b=0; b<(D1->A)->nseq; b++)
-                 {
-                   if (is_gap((D1->A)->seq_al[b][a]));
-                   else if ( n<=3)(DST->A)->seq_al[b][a]=2;
-                   else if ( n>3)(DST->A)->seq_al[b][a]=9;
-                 }
-
-               if ( n==6)n=0;
-             }
-           output_color_html  ( D1->A,  DST->A, out_file);
-           return EXIT_SUCCESS;
-           
-         }
-       else if      ( strncmp (out_format, "color",5)==0)
-        {
-          Alignment *BUF;
-         
-          if (!D1)return 1;
-          
-          if ( !DST) 
-            {
-              fprintf ( stderr,"\n[You Need an evaluation File: Change the output format or use +evaluate][FATAL:%s]\n", PROGRAM);     
-              myexit(EXIT_FAILURE);
-            }
-          while ( out_format[0]!='_' && out_format[0]!='\0' )out_format++;
-          
-          BUF=copy_aln (DST->A, NULL);
-
-       
-       
-
-          if     ( strm ( out_format, "_html"  ))output_color_html  ( D1->A,  DST->A, out_file);
-          else if( strm ( out_format, "_ps"    ))output_color_ps    ( D1->A,  DST->A, out_file);
-          else if( strm ( out_format, "_pdf"   ))output_color_pdf   ( D1->A,  DST->A, out_file);       
-          else if( strm ( out_format, "_ascii"   ))output_color_ascii   ( D1->A,  DST->A, out_file);   
-          else
-            {
-              DST->A=BUF;
-              return main_output (DST, NULL, NULL, out_format+1, out_file);
-            }
-          return EXIT_SUCCESS;
-        }
-       else if ( strm4  ( out_format, "tc_aln","t_coffee_aln", "t_coffee", "tcoffee"))
-         {
-           if (!D1)return 1;
-           vfclose (output_aln ( D1->A, vfopen (out_file, "w")));
-         }
-       else if ( strm  ( out_format, "analyse_pdb"))
-         {
-           if (!D1)return 1;
-           if ( !DST) 
-             {
-               fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);     
-               myexit(EXIT_FAILURE);
-             }
-           analyse_pdb ( D1->A,DST->A, "stdout");
-           (DST->A)=aln2number (DST->A);
-           output_reliability_ps    ( D1->A,  DST->A, out_file);
-         }
-       else if ( strm4 ( out_format, "lower0", "lower1", "lower2", "lower3") || strm4(out_format, "lower4", "lower5", "lower6", "lower7") || strm4 (out_format,"lower8", "lower9", "align_pdb", "malign_pdb") )
-         {
-           if (!D1)return 1;
-           if ( !DST) 
-             {
-               fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);     
-               myexit(EXIT_FAILURE);
-             }
-           
-           
-           
-           (DST->A)=aln2number (DST->A);
-           if ( strm (out_format, "align_pdb"))value=0;
-           else if (  strm (out_format, "malign_pdb"))value=5;
-           else value=atoi(out_format+5);
-           
-           D1->A=filter_aln_upper_lower (D1->A, DST->A,0, value);
-           output_clustal_aln ( out_file, D1->A);
-         }
-       else if ( strnm (out_format, "repeat", 6))
-         {
-           int size;
-           int a, b, c;
-           Alignment *CONC;
-           
-           if ( !D1)return 1;
-           size=atoi (out_format+6);
-           print_aln (D1->A);
-           CONC=declare_aln2 ( (D1->A)->nseq, ((D1->A)->len_aln+1)*size+1);
-
-           for ( a=0; a< (D1->A)->nseq; a++)(D1->A)->seq_al[a][(D1->A)->len_aln]='\0';
-           for ( c=0,a=0; a< (D1->A)->nseq;c++)
-             {
-               
-               sprintf ( CONC->name[c], "%s", (D1->A)->name[a]);
-               for ( b=0; b<size; b++, a++)
-                 {
-                   strcat (CONC->seq_al[c], (D1->A)->seq_al[a]);
-                   strcat (CONC->seq_al[c], "O");
-                 }
-             }
-           CONC->nseq=c;CONC->len_aln=strlen (CONC->seq_al[0]);
-           output_clustal_aln ( out_file, CONC);
-           free_aln (CONC);
-         }
-       
-       else if ( strnm (out_format, "upper", 5))
-             {
-               
-               if (!D1)return 1;
-               if ( !DST) 
-                  {
-                  fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);  
-                  myexit(EXIT_FAILURE);
-                  }
-               
-               
-               (DST->A)=aln2number (DST->A);
-
-               value=atoi(out_format+5);
-
-               D1->A=filter_aln_lower_upper (D1->A, DST->A,0, value);
-               output_clustal_aln ( out_file, D1->A);
-             }
-       
-       else if ( strm4 ( out_format, "filter0", "filter1", "filter2", "filter3"))
-              {
-              if (!D1)return 1;
-              if ( !DST) 
-                  {
-                  fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);  
-                  myexit(EXIT_FAILURE);
-                  }
-               
-              (DST->A)=aln2number (DST->A);
-              
-              D1->A=filter_aln (D1->A, DST->A, atoi(out_format+6));
-              output_clustal_aln ( out_file, D1->A);
-              }
-       
-       else if ( strm3 ( out_format, "phylip_aln", "phylip", "phy"))
-               {
-               if (!D1)return 1;
-               output_phylip_aln ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "mocca_aln"))
-               {
-               if (!D1)return 1;
-               output_mocca_aln ( out_file, D1->A, DST->A);
-               }       
-       else if ( strm ( out_format, "saga_pw_sd_weights") )
-               {
-               if (!D1)return 1;
-               output_pw_weights4saga ((D1->W),(D1->W)->PW_SD, out_file);
-               }
-       else if ( strm ( out_format, "saga_aln"))
-               {
-               if (!D1)return 1;
-               output_saga_aln (out_file, D1->A);
-               }
-       else if (strm2 ( out_format, "aln","clustal_tc")|| strm (out_format, "msa"))
-         {              
-          
-           if (!D1)return 1;
-           output_clustal_aln (out_file, D1->A);
-         }
-       else if (strm5 ( out_format, "strict_clustal","clustal_aln", "clustalw","clustal", "clustalw_aln") || strm (out_format,"number_aln"))
-         {              
-           if (!D1)return 1;
-           output_strict_clustal_aln (out_file, D1->A);
-         }
-       else if ( strm ( out_format, "conc_aln"))
-             {
-               if (!D1)return 1;
-               output_conc_aln (out_file, D1->A);
-               }
-       else if ( strm2 ( out_format, "lalign_aln","lalign"))
-               {
-               if (!D1)return 1;
-               output_lalign (out_file, D1->A);
-               }
-       else if ( strm2 ( out_format, "glalign_aln","glalign"))
-               {
-               if (!D1)return 1;
-               output_glalign (out_file, D1->A, DST->A);
-               }
-       
-       else if ( strm2 ( out_format, "fasta_aln","fasta" ) || strm (out_format, "blast_aln"))
-               {
-               if (!D1)return 1;
-               output_fasta_aln( out_file, D1->A);
-               }
-       else if ( strstr (out_format, "overaln"))
-               {
-               
-                 char *s, mode[100];
-                 OveralnP *F;
-                 int eb=0;
-                 if (!D1) return 1;
-                 F=vcalloc (1, sizeof (OveralnP));
-                 ungap_aln (D1->A);
-                 string_array_upper ((D1->A)->seq_al, (D1->A)->nseq);
-                 if ( D2 && D2->A)
-                   {
-                     D1->A=mark_exon_boundaries (D1->A, D2->A);
-                     eb=1;
-                   }
-                 else if ( (s=get_string_variable ("exon_boundaries")))
-                   {
-                     Sequence *S;
-                     Alignment *EB;
-                     EB=seq2aln(S=main_read_seq(s),NULL, 0);
-                     D1->A=mark_exon_boundaries (D1->A, EB);
-                     free_sequence (S, S->nseq); free_aln (EB);
-                     eb=1;
-                   }
-                 if ( strstr (out_format, "lower")) sprintf (F->mode,"lower");
-                 else if (strstr (out_format, "unalign2"))sprintf (F->mode, "unalign2");
-                 else if (strstr (out_format, "unalign"))sprintf (F->mode, "unalign");
-                 else sprintf (F->mode, "%s", ((s=get_string_variable ("overaln_mode")))?s:"lower");
-                 if (!strm (F->mode, "lower") && !strm (F->mode, "unalign") && !strm (F->mode, "unalign2"))printf_exit (EXIT_FAILURE,stderr,"\nERROR: unknown overaln_mode in overaln output [%s] [FATAL:%s]", mode, PROGRAM);
-                 
-                 if (int_variable_isset ("overaln_threshold"))F->t=get_int_variable ("overaln_threshold");
-                 if (int_variable_isset ("overaln_target"))F->f=get_int_variable ("overaln_target");
-                 if (int_variable_isset ("overaln_P1"))F->p1=get_int_variable ("overaln_P1");
-                 if (int_variable_isset ("overaln_P2"))F->p2=get_int_variable ("overaln_P2");
-                 if (int_variable_isset ("overaln_P3"))F->p3=get_int_variable ("overaln_P3");
-                 if (int_variable_isset ("overaln_P4"))F->p4=get_int_variable ("overaln_P4");
-                 
-                 if (eb)sprintf (F->model, "fsa2");
-                 else   sprintf (F->model, "fsa1");
-                 D1->A=aln2clean_pw_aln (D1->A, F);
-                 
-                 //if (eb)D1->A=aln2clean_pw_aln (D1->A, mode,t, f,p1,p2,p3, "fsa2");
-                 //else   D1->A=aln2clean_pw_aln (D1->A, mode,t, f,p1,p2,p3, "fsa1");
-       
-                 D1->S=aln2seq(D1->A);
-                 output_clustal_aln (out_file, D1->A);
-               } 
-       else if ( strm ( out_format, "est_prf" ))
-               {
-               if (!D1)return 1;
-               output_est_prf( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "clean_est_fasta_seq" ))
-               {
-               if (!D1)return 1;
-               D1->A=clean_est(D1->A);
-               output_fasta_seq(out_file, D1->A);
-               
-               }
-       
-       else if ( strm3 ( out_format, "msf_aln", "gcg", "msf"))
-               {
-               if (!D1)return 1;
-               output_msf_aln( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "rnalign"))
-               {
-               if (!D1)return 1;
-               output_rnalign (out_file, D1->A, DST->S);
-               }
-       else if ( strm ( out_format, "tblastx_db1"))
-         {
-           seq2tblastx_db (out_file,D1->S,1);
-         }
-       else if ( strm ( out_format, "tblastx_db") || strm (out_format, "tblastx_db3"))
-         {
-           seq2tblastx_db (out_file,D1->S,3);
-         }
-       else if ( strm ( out_format, "tblastx_db2"))
-         {
-           seq2tblastx_db (out_file,D1->S,2);
-         }
-       else if ( strm ( out_format, "fasta_seq") ||strm ( out_format, "list")||strm ( out_format, "file_list"))
-         {
-
-               if (!D1)return 1;
-               output_fasta_seq (out_file,D1->A);
-               }
-       else if (strm (out_format, "fasta_tree") )
-               {
-               if (!D1)return 1;
-               output_fasta_tree (out_file,D1->A);
-               }
-       
-       else if ( strm ( out_format, "gotoh_seq"))
-               {
-               if (!D1)return 1;
-               output_gotoh_seq (out_file,D1->A);
-               }
-       else if ( strm (out_format, "fasta_seq1"))
-               {
-               if (!D1)return 1;
-               output_fasta_seq1 (out_file, D1->A);
-               }
-       else if ( strm2 (out_format, "pir_aln", "pir"))
-               {
-               if (!D1)return 1;
-               output_pir_aln (out_file, D1->A);
-               }
-       else if ( strm (out_format, "pir_seq"))
-               {
-               if (!D1)return 1;
-               output_pir_seq (out_file, D1->A);
-               }
-        else if ( strm (out_format, "gor_seq"))
-               {
-                if (!D1)return 1;
-               output_gor_seq (out_file, D1->A);
-               }
-       else if ( strm (out_format, "pir_seq1"))
-               {
-                 if (!D1)return 1;
-               output_pir_seq1 (out_file, D1->A);
-               }
-       else if ( strm (out_format, "pw_lib_saga_aln"))
-               {
-                 if (!D1)return 1;
-               output_pw_lib_saga_aln (out_file, D1->A);
-               }
-       else if ( strm (out_format, "lib"))
-               {
-                 if (!D1)return 1;
-               output_lib (out_file, D1->A);
-               }
-       else if ( strm (out_format, "pdb_constraint_list"))
-               {
-                 if (!D1)return 1;
-               output_constraints (out_file, "pdb",D1->A);
-               }
-       else if ( strm2 (out_format, "constraint_list","tc_lib"))
-               {
-                 
-                 if (!D1)return 1;
-                 else if (!D1->CL)output_constraints (out_file,"sim", D1->A);
-                 else if (D1->CL) vfclose ( save_constraint_list ( D1->CL, 0, (D1->CL)->ne, out_file, NULL, "ascii",(D1->CL)->S)); 
-               }
-       else if (  strm2 (out_format, "extended_lib","extended_cosmetic"))
-               {
-                 if (!D1)return 1;
-                 output_constraints (out_file,out_format, D1->A);
-               }
-       else if ( strncmp (out_format, "extended_pair", 13)==0)
-               {
-                 if (!D1)return 1;
-                 output_constraints (out_file,out_format, D1->A);
-               }
-       else if ( strm (out_format, "cache_id"))
-               {
-                 if (!D1)return 1;
-                 cache_id (D1->A);
-               output_saga_aln (out_file, D1->A);
-               }
-        else if ( strm (out_format, "compress_aln"))
-               {
-                 if (!D1)return 1;
-                compress_aln (D1->A);
-               output_saga_aln (out_file, D1->A);
-               } 
-       else if (strm (out_format, "n_seq") ||strm (out_format, "nseq") )
-               {
-                 if (!D1)return 1;
-               fp=vfopen ( out_file, "w");
-               fprintf ( fp, "%d\n", (D1->A)->nseq);
-                vfclose (fp);
-               }
-       
-       else if ( strm ( out_format, "thread_dna_on_prot_aln"))
-               {
-                 if (!D1)return 1;
-               D1->A=thread_dnaseq_on_prot_aln (D1->S, D2->A);
-               output_saga_aln ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "tdna_fasta_seq1"))
-               {if (!D1)return 1;
-               D1->A=translate_dna_aln (D1->A,0);
-               output_fasta_seq1 (out_file, D1->A);
-               }
-       else if (strm (out_format, "exons"))
-         {
-           Alignment *A;
-           //exons come in upper case
-           //output alternates them upper/lower
-           if (!D1)return 1;
-           A=copy_aln (D1->A, NULL);
-           A->seq_al=gene2exons(A->seq_al,A->nseq);
-           output_fasta_seq (out_file,A);
-           free_aln (A);
-         }
-       else if ( strm (out_format, "wexons"))
-         {
-           if (!D1)return 1;
-           output_wexons (out_file,D1->A);
-       
-         }
-       else if ( strm (out_format, "texons"))
-         {
-           Alignment *A;
-           Sequence *S;
-           //exons come in upper case
-           //output alternate amino acids in upper/lower case
-           //amino acid has the case of its first nucleotide
-           if (!D1)return 1;
-           A=copy_aln (D1->A, NULL);
-           A->seq_al=gene2exons(A->seq_al,A->nseq);
-           S=aln2seq(A);
-           output_fasta_seqS (out_file,S=translate_dna_seqS(S,1,'X'));
-         }
-       else if ( strm (out_format, "sexons"))
-         {
-           Alignment *A;
-
-           //exons come in upper case
-           //output alternate amino acids in upper/lower case
-           //amino acid has the case of its first nucleotide
-           if (!D1)return 1;
-           A=copy_aln (D1->A, NULL);
-           output_fasta_seq ( out_file, D1->A);
-         }
-       
-       else if ( strm ( out_format, "tdna_aln"))
-               {if (!D1)return 1;              
-               D1->A=translate_dna_aln (D1->A,0);
-               output_saga_aln ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "cdna_fasta_seq1"))
-               {if (!D1)return 1;              
-               D1->A= gene2prot(D1->A);
-               output_fasta_seq1 ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "mutate_cdna_aln"))
-               {if (!D1)return 1;
-                   D1->A= mutate_cdna_aln ( D1->A);
-                   output_clustal_aln ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "tdna_sp_aln"))
-               { if (!D1)return 1;
-               if ( !DST) 
-                  {
-                  fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);  
-                  myexit(EXIT_FAILURE);
-                  }            
-              (DST->A)=aln2number (DST->A);
-               D1->A=translate_splice_dna_aln (D1->A, DST->A);
-               output_saga_aln ( out_file, D1->A);
-               }
-       else if (out_format && out_format[0] && (strcmp ( out_format,"rna_graph_fasta")==0))
-               {
-                 if (!D1)return 1;
-               sprintf ( (D1->A)->seq_al[0], "%s",(DST->S)->seq[0]);
-               (D1->A)->nseq=0;
-               output_fasta_seq (out_file, DST->A);
-               }
-       else if (strm ( out_format, "freq_mat"))
-               {
-                 if (!D1)return 1;
-               output_freq_mat (out_file, D1->A);  
-               }
-       else if (strm ( out_format, "maln_pval"))
-               {if (!D1)return 1;
-               output_maln_pval ( out_file, D1->A);
-               }
-       else if ( strm ( out_format, "model_aln"))
-               {
-                 if (!D1)return 1;
-               output_model_aln ( out_file, D1->A);
-               }
-       else if (strncmp (out_format, "mult",4)==0)
-               {
-                 if (!D1)return 1;
-               output_mult_fasta_seq ( out_file, D1->A, atoi(out_format+4));
-               }
-       else if (strm (out_format, "conservation"))
-         {
-           output_conservation_statistics (out_file, D1->A);
-         }
-       else if (strm (out_format, "len"))
-               {
-                 if (!D1)return 1;
-                 output_statistics (out_file, D1->A, "nrl");
-               }
-       else if ( strm (out_format, "name"))
-               {
-                 if (!D1)return 1;
-                 if ( D1->A)output_statistics (out_file, D1->A, "n");
-                 if ( D1->T)
-                   {
-                     Sequence *TS;
-                     TS=tree2seq(D1->T, NULL);print_array_char (vfopen(out_file, "w"), TS->name, TS->nseq, "\n");
-                   }
-               }
-       else if ( strm (out_format, "code_name"))
-               {
-                 char **nl=NULL;
-                 int num, n=0;
-                 Sequence *TS;
-                 FILE *lfp;
-                 if ( D1->A){n=(D1->A)->nseq, nl=(D1->A)->name;}
-                 if ( D1->T){TS=tree2seq(D1->T, NULL);nl=TS->name;n=TS->nseq;}
-                 
-                 lfp=vfopen (out_file, "w");
-                 for ( num=0; num<n; num++)
-                   fprintf (lfp, "\n%s C%d", nl[num], num+1);
-                 fprintf (lfp, "\n");
-                 vfclose (lfp);
-               }
-       else if ( strm ( out_format, "seq2struc"))
-                 {
-                   output_seq2struc (out_file, D1->A);
-                 }
-       else if ( strstr  ( out_format, "pavie_age_channel"))
-         {
-           output_n_pavie_age_channel ( D1->S,out_file, atoi((out_format+strlen ("pavie_age_channel"))));
-           return EXIT_SUCCESS;
-         }
-       else if ( strstr ( out_format, "age_matrix"))
-                 {
-                   output_age_matrix (out_file, atoi((out_format+10)));
-                 }
-       else if ( strm ( out_format, "transitions"))
-                 {
-                   output_transitions (out_file, D1->A);
-                 }
-       
-       else if ( strncmp (out_format, "statistics",10)==0)
-               {
-                 if (!D1)return 1;
-                 
-                 output_statistics (out_file, D1->A,out_format+10);
-               }
-
-
-
-
-       else if ( strm4 (out_format, "newick_tree","newick","binary","nh"))
-               {
-                 if (!D1)return 1;
-                 
-                 /*D1->T=unroot_tree(D1->T);*/
-                 vfclose (print_tree ((D1->T), out_format, vfopen ( out_file, "w")));
-               }
-       else if ( strncmp (out_format, "sarsim", 6)==0)
-               {
-                 if (!D1)return 1;
-                 compare_sar_sequence (D1->S, (D2 &&D2->S)?D2->S:D1->S, atoi(out_format+6));
-                 return EXIT_SUCCESS;
-               }
-       else if ( strncmp (out_format, "sim",3)==0)
-               {
-                 if (!D1)return 1;
-                 output_similarities (out_file, D1->A,out_format);
-               }
-
-       else if ( strncmp (out_format, "cov",3)==0)
-               {
-                 if (!D1)return 1;
-                 output_similarities (out_file, D1->A,out_format);
-               }
-       else if ( strm (out_format, "stockholm_aln"))
-         {
-           output_stockholm_aln (out_file,D1->A, (D2)?D2->A:NULL);
-         }
-       else if ( strm (out_format, "pair_sim"))
-         {
-           if ( !D2)
-             {
-               fprintf ( stderr, "\n-output=pair_sim: provide aln1 via -in and aln2 via -in2 [FATAL:%s]\n", PROGRAM);
-               myexit (EXIT_FAILURE);
-             }
-           output_similarities_pw (out_file, D1->A,D2->A,out_format);
-         }
-       else if ( strm (out_format, "matrix") || strm (out_format, "blast_matrix"))
-         {
-           output_blast_mat (D1->M, out_file);
-         }
-       else if ( strm (out_format, "header_matrix"))
-         {
-           output_header_mat(D1->M, out_file);
-         }
-                 
-       else 
-               {
-
-                   fprintf ( stderr, "\n%s is an UNKNOWN OUTPUT FORMAT [FATAL:%s]\n",out_format, PROGRAM); 
-                   myexit (EXIT_FAILURE);
-                   
-               }
-       
-       //Remove the expansion
-       if ( expanded)
-         {
-           free_aln (D1->A);
-           D1->A=BUF_A;
-         }
-       return 0;
-       }
-int is_in_format_list ( char *name)
-       {
-       if ( strcmp ( name, "saga_aln")==0)return 1;
-       if ( strcmp ( name, "number_aln")==0)return 1;
-       if ( strcmp ( name, "clustal_aln")==0)return 1; 
-       if ( strcmp ( name, "fasta_aln")==0)return 1;
-       if ( strcmp ( name, "number_fasta")==0)return 1;
-       if ( strcmp ( name, "fasta_seq")==0)return 1;
-       if ( strcmp ( name, "pdb")==0)return 1;
-       if ( strcmp ( name, "msf_aln")==0)return 1;
-       if ( strcmp ( name, "dali_aln")==0)return 1;
-       if ( strcmp ( name, "dali_seq")==0)return 1;
-       if ( strcmp ( name, "barton_list_tc")==0)return 1;
-       if ( strcmp ( name, "est_prf")==0)return 1;
-       
-       if ( strcmp ( name, "gotoh_aln")==0)return 1;
-       if ( strcmp ( name, "amps_aln")==0)return 1;
-       if ( strcmp ( name, "pir_aln")==0)return 1;
-       if ( strcmp ( name, "pir_seq")==0)return 1;
-       if ( strcmp ( name, "est_fasta")==0)return 1;
-       if ( strcmp ( name, "amps_sd_scores")==0)return 1;
-       if ( strcmp ( name, "pima_aln")==0)return 1;
-       if ( strcmp ( name, "dialign_aln")==0)return 1;
-       if ( strcmp ( name, "gor_seq")==0)return 1;
-       if ( strcmp ( name, "gor_struc")==0)return 1;
-       if ( strcmp ( name, "stockholm_aln")==0)return 1;
-       
-       return 0;
-       }
-int is_struc_in_format_list ( char *name)
-       {
-       if ( strcmp ( name, "rna_number")==0)return 1;
-       if ( strcmp ( name, "fasta_seq")==0)return 1;
-       return 0;
-       }
-char *format_name2aln_format_name (char *name)
-        {
-         if ( strm (name, "gcg"))sprintf (name, "msf");
-         else if ( strm (name, "fasta"))sprintf (name, "fasta_aln");
-         return name;
-       }
-int is_out_format_list ( char *name)
-       {
-         return main_output (NULL, NULL, NULL, name, NULL);    
-       }
-       
-int is_struc_out_format_list ( char *name)
-       {
-         return main_output (NULL, NULL, NULL, name, NULL);    
-       }       
-
-/**************************************************************************************************/
-/*************************************REFORMAT UTIL*************************************************/
-/**************************************************************************************************/
-
-/*************************************REFORMAT IN**************************************************/
-/**************************************************************************************************/
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               READ COG FILE                                             */
-/*                                                                                         */
-/***************************************************************************************** */
-        
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               INPUT WEIGHTS                                            */
-/*                                                                                         */
-/***************************************************************************************** */
-       
-Weights* get_amps_sd_scores ( char *fname)
-       {
-       FILE *fp;
-       char *buf;
-       char *buf2;
-       int nseq;
-       Weights *W;
-       int a, b,e;
-       int c;
-       float array[20];
-       
-       buf=vcalloc ( 1001, sizeof (char));
-       buf2=vcalloc ( 1001, sizeof (char));
-       
-       fp=vfopen ( fname, "r");
-       set_fp_id ( fp, "Index");
-       buf=fgets ( buf, 1000, fp);
-       fscanf ( fp, "%s", buf2);       
-       
-       nseq=0;
-       while ( isalnum(buf2[0]) && !isalpha(buf2[0]))
-               {
-               nseq++;
-               buf=fgets ( buf, 1000, fp);
-               fscanf ( fp, "%s", buf2);
-               }
-       vfclose ( fp);
-       
-       W=declare_weights (nseq);
-       
-       fp=vfopen ( fname, "r");
-       set_fp_id ( fp, "Index");
-       buf=fgets ( buf, 1000, fp);
-       fscanf ( fp, "%s", buf2);       
-       
-       a=0;
-       while ( isalnum(buf2[0]) && !isalpha(buf2[0]))
-               {
-               fp=set_fp_after_char (fp, '>');
-               fscanf ( fp, "%s",W->seq_name[a]);
-               buf=fgets ( buf, 1000, fp);
-               fscanf ( fp, "%s", buf2);
-               a++;
-               }
-       buf=fgets ( buf, 1000, fp);
-       c=1;
-       while ( c!=0)
-               {
-               for ( e=0; e< 16; e++)
-                       {
-                       c=fscanf ( fp, "%f", &array[e]);
-                       }
-               fscanf ( fp, "\n");
-               if ( c!=0)
-                       {
-                       
-                       a=(int)array[0]-1;
-                       b=(int)array[1]-1;
-                       W->PW_ID[b][a]=W->PW_ID[a][b]=array[9];
-                       W->PW_SD[b][a]=W->PW_SD[a][b]=array[14];
-                       }
-               
-               }
-       vfclose ( fp);
-       sprintf ( W->comments, "SD WEIGHTS GENERATED WITH THE PROGRAM AMPS IN PAIRWISE MODE");
-       vfree ( buf);
-       return W;
-       }
-
-Weights *read_seq_weight (char **name, int nseq, char* seq_weight)
-       {
-       int a, p;
-       Weights *W;
-       float w;
-       
-       FILE *fp;
-       char line[LONG_STRING];
-       char sname[MAXNAMES];
-       
-       
-       /*Read sequence weights:
-       * comment
-       name1 weight1
-       .....
-
-
-       NOTE:
-       weights must be between 0 and 1;
-       
-       sequences not in S do not get any weight
-       sequences in S but not in file get a weight of 1
-       */
-       if ( !is_single_seq_weight_file (seq_weight))
-        {
-          fprintf ( stderr, "\nERROR: File %s is not in Format SINGLE_SEQ_WEIGHT_FORMAT_01 [FATA:%s]", seq_weight,PROGRAM);
-          myexit (EXIT_FAILURE);
-          return NULL;
-        }
-       else
-        {
-          W=declare_weights(nseq);
-          for ( a=0; a< nseq; a++)
-            {
-              sprintf ( W->seq_name[a], "%s", name[a]);
-              W->SEQ_W[a]=1;
-            }
-          sprintf ( W->mode, "%s", seq_weight);
-          fp=vfopen (seq_weight, "r");
-          
-          
-          while ( fgets( line,LONG_STRING-1, fp))
-            {
-              if ( line[0]=='*' ||line[0]=='#' || isblanc(line));
-              else
-                {
-                  if (sscanf(line, "%s %f", sname, &w)!=2)continue;
-                  if ( (p=name_is_in_list ( sname, W->seq_name, nseq, MAXNAMES-1))!=-1)
-                    {
-                      W->SEQ_W[p]=w;
-                    }
-                }
-            }
-          vfclose (fp);
-          return W;
-        }
-       }
-       
-  
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               INPUT MISC                                               */
-/*                                                                                         */
-/***************************************************************************************** */
-
-char *** read_rename_file ( char *fname, int code)
-{
-  int n;
-  FILE *fp;
-  char ***convert=NULL;
-  
-  convert=declare_arrayN(3, sizeof (char),count_n_line_in_file(fname) +1,2,MAXNAMES+1);
-  fp=vfopen (fname, "r");
-  n=0;
-  if ( code==CODE)      while ( fscanf ( fp, "%s %s\n", convert[n][0], convert[n][1])==2)n++;
-  else if (code==DECODE)while ( fscanf ( fp, "%s %s\n", convert[n][1], convert[n][0])==2)n++;
-  vfclose (fp);
-  return convert;
-}
-
-void get_barton_list_tc_seq ( char *in_file)
-       {
-       FILE *fp, *fp_make, *fp_length, *fp_long;
-       FILE *fp_small[9];
-       
-       static char *buf;
-       int len_buf=10000;
-       char name[100];
-       
-       char pwd[100];
-       int a,c,nseq;
-       int k=0;
-       int *length;
-       int longest=0;
-       
-       c=0;
-       length=vcalloc ( 1000, sizeof(int));
-       if ( buf==NULL)buf=vcalloc ( len_buf, sizeof (char));
-       fp=vfopen (in_file, "r");
-       fp_long=vfopen ( "barton_seq_list_large", "w");
-       fp_make=vfopen ( "make_dir", "w");
-       fp_length=vfopen ( "barton_length", "w");
-       for ( a=0; a< 9; a++)
-               {
-               sprintf ( name, "barton_nseq%d",a);
-               fp_small[a]=vfopen ( name, "w");
-               }
-       get_pwd (pwd);
-       
-       
-       while ( c!=EOF)
-               {a=0;
-               while ( (c=fgetc(fp))!='#');
-               while ( (c=fgetc(fp))=='#');
-               ungetc ( c, fp);
-               while ( (c=fgetc(fp))!='#')buf[a++]=c;
-               buf[a]='\0';
-               
-               sprintf ( name, "%s", buf);
-       
-               while ( (c=fgetc(fp))=='#');
-               
-               if ( c!=EOF)
-                       {
-                       a=0;
-                       while ( (c=fgetc(fp))!='#' && c!=EOF)
-                               {
-                               buf[a++]=c;
-                               if (a==len_buf)
-                                       {
-                                       len_buf+=10000;
-                                       buf=vrealloc ( buf, len_buf*sizeof (char));
-                                       }
-                               } 
-                       buf[a]='\0';
-                       if (c!=EOF)
-                               {
-                               
-                               nseq=process_barton_entry ( buf,name);
-                               length[nseq]++;
-                               longest=(longest<nseq)?nseq:longest;
-                               
-                               if ( nseq<=8) fprintf ( fp_small[nseq], "%s.pep\n", name);
-                               else fprintf ( fp_long, "%s.pep\n",name);
-                               fprintf ( fp_make, "mkdir %s\nmv %s.pep %s\nmv %s.check %s\n", name, name, name, name, name);
-                               k++;
-                               }
-                       
-                               
-                       }
-               }
-       
-       vfclose (fp);
-       vfclose (fp_long);
-       for ( a=0; a< 9; a++)vfclose (fp_small[a]);
-       vfclose (fp_make);
-       for ( a=0; a<= longest; a++)fprintf ( fp_length, "%d: %d\n", a, length[a]);
-       vfclose ( fp_length);
-       
-       }
-       
-int process_barton_entry (char *buf, char *name)                       
-    {      
-    Alignment *LA;
-    Sequence *LS;
-    int a,c;
-    static char *buf2;
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=999999;
-    int nseq=0;
-    int l;
-    char fname[100];
-    char com_name[100];
-    int rm_gap=1;
-
-    sprintf ( fname, "%s.pep", name);
-    sprintf ( com_name, "%s.check",name);
-    
-    if ( buf2==NULL)buf2=vcalloc ( 10000, sizeof (char));
-    a=0;               
-    while (buf[a]!='\0')
-               {
-                if (buf[a]=='>')
-                       {
-                       a=get_string_line (a,2, buf, buf2); 
-                       while ((c=buf[a++])!='*')
-                               if (isalnum (c)|| c=='.' || c=='-')
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        nseq++;
-                        clen=0;
-                       }
-               if ( buf[a]!='\0')a++;
-               }
-    
-    
-    LS=declare_sequence (  min_len_seq,  max_len_seq,  nseq); 
-    LS->nseq=nseq;
-    
-    
-    for (a=0, current=0; current< nseq; current++) 
-       {
-       a=get_string_line ( a, 1, buf, buf2);
-       sscanf ( buf2, ">P1;%s", LS->name[current]);
-       a=get_string_line ( a, 1, buf, buf2);
-       l=strlen ( buf2);
-       buf2[l-1]='\0';
-       sprintf ( LS->seq_comment[current],"%s", buf2);
-       
-       p=0;
-       while ( (c=buf[a++])!='*')
-               {
-               if (isalpha (c))
-                       LS->seq[current][p++]=tolower (c);
-               else if ( isgraph(c))
-                       LS->seq[current][p++]=(c);
-               }       
-       a++;
-       }
-    
-    LA=declare_Alignment(LS);
-    seq2aln ( LS, LA,rm_gap);
-    output_fasta_seq (fname,LA);
-    output_pir_check (com_name,LA->nseq, LA->seq_comment);
-    free_Alignment ( LA);
-    free_sequence ( LS, nseq);   
-    
-    return nseq;
-    }
-
-       
-       
-
-Structure *read_rna_struc_number (Alignment *A,char *fname)
-       {
-       FILE *fp;
-       int a;
-       char x,y;
-       float f;
-       Sequence *SA;
-       Structure *ST;
-       int first, last;
-       
-       SA=declare_sequence ( A->len_aln, A->len_aln, 1);
-       SA->len[0]=A->len[0];
-       for ( a=0; a< SA->len[0]; a++)
-               SA->seq[0][a]='.';
-       ST=declare_rna_structure_num (SA);
-       ST->S=SA;
-       
-       fp=vfopen ( fname, "r");
-       fscanf ( fp, "%c\n%d\n",&x, &(ST)->tot_list);
-       for ( a=0; a<(ST)->tot_list; a++)
-               {
-               fscanf ( fp, "%d %d %d %c %c %f\n", &(ST)->list[a][0],&(ST)->list[a][1],&(ST)->list[a][2], &x, &y, &f);
-               (ST)->list[a][0]--;
-               (ST)->list[a][1]--;
-               (ST)->list[a][2]--;
-               if ( a==0)
-                       {
-                       (ST)->stem[0][0]=(ST)->list[a][0];
-                       (ST)->stem[0][1]=a;
-                       }
-               else if ( (ST)->stem[(ST)->tot_stem][0]==(ST)->list[a][0]);
-               else if ( (ST)->stem[(ST)->tot_stem][0]!=(ST)->list[a][0])
-                       {
-                       (ST)->stem[(ST)->tot_stem][2]=a-1;
-                       (ST)->tot_stem++;
-                       (ST)->stem[(ST)->tot_stem][0]=(ST)->list[a][0];
-                       (ST)->stem[(ST)->tot_stem][1]=a;
-                       }
-                       
-               SA->seq[0][(ST)->list[a][1]]='-';
-               SA->seq[0][(ST)->list[a][2]]='-';
-               }
-       (ST)->stem[(ST)->tot_stem][2]=a-1;      
-       (ST)->tot_stem++;
-       for ( a=0; a< (ST)->tot_stem; a++)
-               {
-       
-               first=(ST)->stem[a][1];
-               last=(ST)->stem[a][2];
-               SA->seq[0][(ST)->list[first][1]]='>';
-               SA->seq[0][(ST)->list[first][2]]='<';
-               SA->seq[0][(ST)->list[last][1]]='>';
-               SA->seq[0][(ST)->list[last][2]]='<';    
-               }
-       
-       return ST;      
-       }
-                 
-Structure * declare_rna_structure_num (Sequence *SA)
-       {
-       Structure *ST;
-       ST=vcalloc ( 1, sizeof ( Structure));
-       ST->list=declare_int ( SA->len[0], 3);
-       ST->stem=declare_int ( SA->len[0], 3);
-       return ST;
-       }
-char ** read_lib_list (char *name, int *n)
-{
-
-  char **lines;
-  char **list;
-  int a, b, l;
-  
-  lines=file2lines (name);
-  l=atoi (lines[0]);
-  
-  list=vcalloc (l, sizeof (char*));
-  for ( n[0]=0,a=1; a<l; a++,b++)
-    if ( !strstr (lines[a], "TC_LIB_LIST_FORMAT_01"))list[n[0]++]=lines[a];
-  vfree (lines);
-  return list;
-}
-  
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               INPUT SEQ                                                */
-/*                                                                                         */
-/***************************************************************************************** */
-char ***read_group ( char *file)
-{
-  /*Format: Fasta like, the name fo the group followed with the name of the sequences
-    ><Group name> <First Seq> <second seq> ....
-    Groups must NOT be overlaping
-    list[group_index][0]="number of sequences"
-    list[group_index][1]="group name"
-    list[group_index][2...N]="sequence"
-  */ 
-
-  FILE *fp;
-  char *buf;
-  char ***list;
-  int a, c, l;
-
-
-  
-  l=measure_longest_line_in_file (file)+1;
-  buf=vcalloc (l, sizeof (char)); 
-  list=vcalloc ( count_n_line_in_file (file )+1, sizeof (char**));
-  
-  fp=vfopen (file, "r");
-  
-  a=0;
-  while ((c=fgetc(fp))!=EOF)
-    {
-      buf=fgets (buf,l-1, fp);
-      if ( c=='>')list[a++]=string2list (buf);
-    }
-  vfclose (fp);
-  vfree (buf);
-  return list;
-}
-
-
-static Sequence* get_pdb_sequence_from_field   (char *fname, char *field);
-
-Sequence* get_pdb_sequence   (char *fname)
-{
-  Sequence *S;
-
-  if ( (S=get_pdb_sequence_from_field(fname, "SEQRES"))!=NULL);
-  else if ( (S=get_pdb_sequence_from_field(fname, "ATOM"))!=NULL)
-    {
-      add_warning (stderr,"Warning: Read Sequence from ATOM field in %s [%s:WARNING]", fname, PROGRAM);
-    }
-  else
-    {
-      add_warning ( stderr, "\nWARNING: failed to extract sequence from %s [%s:WARNING]\n", fname, PROGRAM);
-      S=NULL;
-    }
-  return S;
-}
-
-
-static Sequence* get_pdb_sequence_from_field   (char *fname, char *field)
-{
-       char *tp_name;
-       char *command;
-       char *pdbid;
-       Sequence *S;
-
-
-       command=vcalloc ( LONG_STRING, sizeof (char));
-       tp_name=vtmpnam (NULL);
-       sprintf ( command, "extract_from_pdb -seq_field %s -chain FIRST -infile \'%s\' -mode fasta > %s", field, check_file_exists(fname), tp_name);
-//     printf("CO: %s\n", command);
-//     char *x = vcalloc ( LONG_STRING, sizeof (char));
-//     sprintf(x, "cp %s ~/Desktop/erg.txt", tp_name);
-//     my_system(x);
-       if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:get_pdb_seq] %s\n", command);
-       my_system ( command);
-
-
-       S=get_fasta_sequence ( tp_name, NULL);
-       if (S==NULL)return NULL;
-       
-       if ( (pdbid=get_pdb_id (fname))){sprintf ( S->name[0], "%s",pdbid);vfree (pdbid);} 
-       S->nseq=1;
-
-       sprintf ( S->file[0], "%s", fname);
-       S->max_len=S->min_len=S->len[0];
-       if ( S->len[0]==0)
-       {
-               free_sequence (S, -1);
-               S=NULL;
-       }
-
-       vremove ( tp_name);
-       vfree ( command);
-       
-       return S;
-}
-
-char * get_pdb_file   ( char *fname)
-     {
-        char *file;
-        int a, c;
-        FILE *fp;
-        
-
-        a=0;
-        file=vcalloc ( sizeof (char),count_n_char_in_file ( fname)+1);
-        fp=vfopen ( fname, "r");
-        while ( (c=fgetc(fp))!=EOF)file[a++]=c;
-        file[a]='\0'; 
-        return file;
-     }
-        
-Sequence* get_struc_gor ( char *fname)
-    {
-    int nseq, min_len, max_len;
-    int a, c;
-    int len;
-    char name[STRING];
-    
-
-    FILE *fp;
-    Sequence *S;
-
-    min_len=max_len=-1;
-    fp=vfopen ( fname, "r");
-    nseq=0;
-    while ( (c=fgetc(fp))!=EOF)
-           {
-           if ( c!='!');
-           else
-               {
-               nseq++;
-               fscanf ( fp, "%s %d", name, &len);
-               if (min_len==-1)min_len=max_len=len;
-               else
-                   {
-                   min_len=(len>min_len)?min_len:len;
-                   max_len=(len>max_len)?len:max_len;
-                   }
-               }
-           
-           }
-    vfclose (fp);
-   
-    S=declare_sequence (  min_len,  max_len+1,nseq); 
-    S->nseq=0;
-    
-    fp=vfopen (fname,"r");     
-     while ( (c=fgetc(fp))!=EOF)
-            {
-            if ( c!='!');
-            else
-               {
-               fscanf ( fp, "%s %d\n",S->name[S->nseq], &(S->len[S->nseq]));
-               
-               while ( (c=fgetc(fp))!='\n');
-       
-               for ( a=0; a<S->len[S->nseq]; a++)
-                   fscanf ( fp, " %*c %c %*f %*f %*f\n",&(S->seq[S->nseq][a]));
-               
-               S->seq[S->nseq][a]='\0';
-               while ( (c=fgetc(fp))!='!' && c!=EOF);
-               ungetc (c, fp);
-               S->nseq++;
-               }
-            
-            }
-    vfclose (fp);
-    return S;          
-    }
-               
-Sequence* get_sequence_dali (char *fname)
-    {
-    Sequence *LS;
-    FILE *fp;
-    int c;
-
-    char name[100];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=999999;
-    int nseq=0;
-    
-    if ((fp=vfopen (fname,"r"))==NULL)
-        {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-        }  
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (isdigit(c))
-                       {
-                       ungetc(c, fp);
-                       fscanf (fp, "%s",name);
-                       while (!isdigit(c=fgetc(fp)) && c!=EOF)
-                               if (isalnum (c) || c=='.' || c=='-')
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        nseq++;
-                       clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-               }
-    vfclose (fp);
-               
-    LS=declare_sequence (  min_len_seq,  max_len_seq+1,nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    
-    current=0;
-    c=fgetc(fp);
-       while (c!=EOF)
-               {
-               if (isdigit(c))
-                       {
-                       ungetc(c, fp);
-                       fscanf_seq_name (fp, LS->name[current]);
-                       p=0;
-                       while (!isdigit(c=fgetc(fp)) && c!=EOF)
-                               {
-                               if (isalpha (c))
-                                   LS->seq[current][p++]=tolower (c);
-                               else if ( c=='.')
-                                   LS->seq[current][p++]='-';
-                               else if ( c=='-')
-                                   LS->seq[current][p++]='-';
-                               }           
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-                       current++;
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-
-    vfclose (fp);
-    
-    
-    return LS;
-    }  
-
-Sequence* get_dialign_sequence (char *fname)
-    {
-    Sequence *LS;
-    FILE *fp;
-    int c;
-
-    char name[10000];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=999999;
-    int nseq=0, l=0;
-    char *buf;
-    
-    buf=vcalloc ( 1000, sizeof (char));
-    if ((fp=vfopen (fname,"r"))==NULL)
-        {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-        }  
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {fscanf (fp, "%s",name);
-                       
-                       buf=fgets ( buf, 1000, fp);
-                       while ((c=fgetc(fp))!='>' && c!=EOF && c!=' ' && c!='\t')
-                               if (isalnum (c)|| is_gap(c))
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        nseq++;
-                       clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-               }
-    vfclose (fp);
-               
-    LS=declare_sequence (  min_len_seq,  max_len_seq, nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    
-    current=0;
-    c=fgetc(fp);
-       while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                         
-                       fscanf_seq_name (fp, LS->name[current]);
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==',')LS->name[current][l-1]='\0';
-                       buf=fgets ( buf, 1000, fp);
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF && c!=EOF && c!=' ' && c!='\t')
-                               if (isalpha (c))
-                                   LS->seq[current][p++]=tolower (c);
-                               else if ( isgraph(c))
-                                   LS->seq[current][p++]=(c);
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-                       current++;
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-
-    vfclose (fp);
-    return LS;
-    }
-
-Sequence* get_pima_sequence (char *fname)
-    {
-    Sequence *LS;
-
-    FILE *fp;
-    int c;
-
-    char name[10000];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=999999;
-    int nseq=0, l=0, len=0;
-    char *buf, *buf2;
-    char prefix[1000];
-    
-    sprintf (  prefix, "%s",fname);
-    
-    buf=strstr(prefix, "-");
-    buf[0]='\0';
-    len=strlen (prefix);
-       
-   
-    
-    buf=vcalloc ( 1000, sizeof (char));
-    if ((fp=vfopen (fname,"r"))==NULL)
-        {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-        }  
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                         fscanf_seq_name (fp,name);
-                         if ( strlen(name)>=len && strncmp ( name, prefix, len)==0)
-                               {
-                                 c=fgetc(fp);
-                               }
-                         else
-                               {
-                               
-                               buf=fgets ( buf, 1000, fp);
-                               while ((c=fgetc(fp))!='>' && c!=EOF)
-                                       if (isalnum (c)|| is_gap(c))
-                                               clen++;
-                                max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                                min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                               nseq++;
-                               clen=0;
-                               }
-                       }
-               else
-                       c=fgetc (fp);
-               }
-    vfclose (fp);
-               
-    LS=declare_sequence (  min_len_seq,  max_len_seq, nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    
-    current=0;
-    c=fgetc(fp);
-       while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       fscanf_seq_name (fp,LS->name[current]);
-                       if ( strlen(LS->name[current])>=len && strncmp ( LS->name[current], prefix, len)==0)
-                               c=fgetc (fp);
-                       else
-                               {
-                               buf2=strstr (LS->name[current], ".");
-                               if ( buf2!=NULL) buf2[0]='\0';
-                                
-                               l=strlen ( LS->name[current]);
-                               if ( LS->name[current][l-1]==','||LS->name[current][l-1]==',')LS->name[current][l-1]='\0';
-                               buf=fgets ( buf, 1000, fp);
-                               p=0;
-                               while ((c=fgetc(fp))!='>' && c!=EOF)
-                                       if (isalpha (c))
-                                           LS->seq[current][p++]=tolower (c);
-                                       else if ( isgraph(c))
-                                           LS->seq[current][p++]=(c);
-                               LS->seq[current][p]='\0';
-                               LS->len[current]=strlen ( LS->seq[current]);
-                               current++;
-                               }
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-
-    vfclose (fp);
-    return LS;
-    }
-
-Sequence* perl_reformat2fasta (char *perl_command, char *fname)
-    {
-      char command[1000];
-      char *file;
-
-      file=vtmpnam (NULL);
-      
-      check_program_is_installed ( perl_command,"", perl_command,EMAIL,IS_FATAL);
-      sprintf ( command, "%s %s > %s", perl_command, fname, file);
-      my_system ( command);
-      return get_fasta_sequence (file, NULL);
-    }
-Sequence* get_fasta_sequence_num (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-    char *buffer;
-    FILE *fp;
-    int a;
-
-    int   c;
-    char *name;
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max;
-    int max_len_seq=0;
-    int min_len_seq=0;
-    int nseq=0, l=0;
-    
-    
-    
-    int *sub;
-    
-    buffer=vcalloc (1000, sizeof (char)); 
-    name=vcalloc ( 100, sizeof (char));
-
-    nseq=count_n_char_x_in_file(fname, '>');
-    min_len_seq=max=count_n_char_in_file(fname);
-    sub=vcalloc (max+1, sizeof (int));
-
-    fp=vfopen (fname,"r");
-
-    
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                       fscanf_seq_name (fp,name);
-                       while ((c=fgetc(fp))!='\n' && c!=EOF);
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               if (isalnum (c)|| is_gap(c))
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-                
-               }  
-
-    vfclose (fp);              
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    current=0;
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       
-                       fscanf_seq_name (fp,LS->name[current]);
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==';')LS->name[current][l-1]='\0';
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       a=0;
-                       while ((c=fgetc(fp))!='\n' && c!=EOF && a<(COMMENT_SIZE-1))LS->seq_comment[current][a++]=c;
-                       LS->seq_comment[current][a]='\0';
-
-
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               {
-                               if (isalnum (c))
-                                   LS->seq[current][p++]=c;
-                               else if (is_gap(c))
-                                   LS->seq[current][p++]=c;
-                               }
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-
-                       current++;
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-                       
-    
-    vfclose (fp);
-    
-
-    vfree (sub);
-    vfree (name);
-    vfree (buffer);
-    return LS;
-    }
-
-Sequence *get_tree_file_list ( char *fname)
-{
-
-  char ***list;
-  char *tmp;
-  int a;
-  FILE *fp;
-  
-  tmp=vtmpnam (NULL);
-  list=file2list (fname, "\n");
-  fp=vfopen (tmp, "w");
-  a=0;
-  while (list[a] && !isspace(list[a][1][0]))
-    {
-      char *s;
-      s=file2string (list[a][1]);
-      fprintf ( fp, ">%s\n%s\n", list[a][1], (s)?s:"");
-      a++;
-    }
-  vfclose (fp);
-  free_arrayN((void ***)list, 3);
-  return get_fasta_tree (tmp, NULL);
-}
-Sequence *get_file_list ( char *fname)
-{
-
-  char ***list;
-  char *tmp;
-  int a;
-  FILE *fp;
-  
-  tmp=vtmpnam (NULL);
-  list=file2list (fname, "\n");
-  fp=vfopen (tmp, "w");
-  a=0;
-  while (list[a] && !isspace(list[a][1][0]))
-    {
-
-      fprintf ( fp, ">%s\n", list[a][1]);
-      a++;
-    }
-  vfclose (fp);
-  free_arrayN((void ***)list, 3);
-  return get_fasta_sequence (tmp, NULL);
-}
-Sequence*get_fasta_tree (char *fname, char *comment_out)
-{
-  Sequence *LS;
-    char *buffer;
-    FILE *fp;
-    int a;
-
-    int   c;
-    char *name;
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max;
-    int max_len_seq=0;
-    int min_len_seq=0;
-    int nseq=0, l=0;
-    
-    
-    
-    int *sub;
-    
-    buffer=vcalloc (1000, sizeof (char)); 
-    name=vcalloc ( 100, sizeof (char));
-
-    nseq=count_n_char_x_in_file(fname, '>');
-    min_len_seq=max=count_n_char_in_file(fname);
-    sub=vcalloc (max+1, sizeof (int));
-
-    fp=vfopen (fname,"r");
-
-    
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                       fscanf_seq_name (fp,name);
-                       while ((c=fgetc(fp))!='\n' && c!=EOF);
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                         if (isgraph(c))
-                           clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-                
-               }  
-
-    vfclose (fp);              
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    current=0;
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       
-                       fscanf_seq_name (fp,LS->name[current]);
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==';')LS->name[current][l-1]='\0';
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       a=0;
-                       while ((c=fgetc(fp))!='\n' && c!=EOF && a<(COMMENT_SIZE-1))LS->seq_comment[current][a++]=c;
-                       LS->seq_comment[current][a]='\0';
-
-                       
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               {
-                                 LS->seq[current][p++]=c;
-                               }
-
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-
-                       current++;
-               
-                       }
-                       
-               else
-                   c=fgetc ( fp);
-               }
-                       
-    
-    vfclose (fp);
-    
-
-    vfree (sub);
-    vfree (name);
-    vfree (buffer);
-    
-    return LS;
-}
-Sequence* get_fasta_sequence_raw (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-    char *buffer;
-    FILE *fp;
-    int a;
-
-    int   c;
-    char *name;
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max;
-    int max_len_seq=0;
-    int min_len_seq=0;
-    int nseq=0, l=0;
-    
-    
-    
-    int *sub;
-    
-    buffer=vcalloc (1000, sizeof (char)); 
-    name=vcalloc ( 100, sizeof (char));
-
-    nseq=count_n_char_x_in_file(fname, '>');
-    min_len_seq=max=count_n_char_in_file(fname);
-    sub=vcalloc (max+1, sizeof (int));
-
-    fp=vfopen (fname,"r");
-
-    
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                       fscanf_seq_name (fp,name);
-                       while ((c=fgetc(fp))!='\n' && c!=EOF);
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                         if (isgraph(c))
-                           clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-                
-               }  
-
-    vfclose (fp);              
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    
-    LS->nseq=nseq;
-   
-    fp=vfopen (fname,"r");
-    current=0;
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       
-                       fscanf_seq_name (fp,LS->name[current]);
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==';')LS->name[current][l-1]='\0';
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       a=0;
-                       while ((c=fgetc(fp))!='\n' && c!=EOF && a<(COMMENT_SIZE-1))LS->seq_comment[current][a++]=c;
-                       LS->seq_comment[current][a]='\0';
-
-                       
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               {
-                                 //if (c<'A')c+='z';
-                                 if (c!='\n')LS->seq[current][p++]=c;
-                               }
-
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-
-                       current++;
-               
-                       }
-                       
-               else
-                   c=fgetc ( fp);
-               }
-                       
-    
-    vfclose (fp);
-    
-
-    vfree (sub);
-    vfree (name);
-    vfree (buffer);
-    return LS;
-    }
-Sequence* get_fasta_sequence (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-    Sequence *pdb_S;
-    int a;
-
-    char *pdb_name;
-    
-    char *buffer;
-    FILE *fp;
-
-    int   c;
-    char *name;
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max;
-    int max_len_seq=0;
-    int min_len_seq=0;
-    int nseq=0, l=0;
-    char *sub;
-    int disk=0;
-    int coor=0;
-
-    
-       
-    buffer=vcalloc (1000, sizeof (char)); 
-    name=vcalloc ( 10000, sizeof (char));
-
-    nseq=count_n_char_x_in_file(fname, '>');
-    if (disk==1 || get_int_variable ("use_disk") || getenv ("SEQ_ON_DISK_4_TCOFFEE")){disk=1;}
-    if ( nseq==0)
-      {
-       vfree (buffer); vfree (name);
-       return NULL;
-      }
-    
-    min_len_seq=max=count_n_char_in_file(fname);
-    sub=vcalloc (max+1, sizeof (char));
-
-    fp=vfopen (fname,"r");
-
-    nseq=0;
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                         nseq++;
-                         fscanf_seq_name (fp,name);
-                         while ((c=fgetc(fp))!='\n' && c!=EOF);
-                         while ((c=fgetc(fp))!='>' && c!=EOF)
-                           {
-                             if (isalnum (c)|| is_gap(c))
-                               sub[clen++]=c;
-                           }
-                         
-                         if (strm (sub, "PDB"))
-                           {
-                             pdb_name=get_pdb_struc(name,0, 0);
-                             pdb_S=get_pdb_sequence (pdb_name);
-                             if (pdb_S)
-                               {
-                                 clen=strlen( pdb_S->seq[0]);
-                                 free_sequence ( pdb_S,1);
-                               }
-                             else
-                               clen=0;
-                             
-                           }
-                                                 
-                         max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                         min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                         clen=0;
-                       }
-                else
-                  c=fgetc (fp);
-                
-               }  
-    
-    vfclose (fp);      
-    
-    
-    if ( disk==0)
-      LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    else
-      {
-       LS=declare_sequence (0,0,nseq);
-       for (a=0; a<nseq; a++)LS->seq[a]=NULL;
-      }
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    current=0;
-    c=fgetc(fp);coor++;
-    
-    while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                         coor+=fscanf_seq_name (fp, LS->name[current]);
-
-                         
-                         l=strlen ( LS->name[current]);
-                         if ( LS->name[current][l-1]==','||LS->name[current][l-1]==';')LS->name[current][l-1]='\0';
-                         LS->name[current]=translate_name ( LS->name[current]);                        
-                         a=0;
-                         while ((c=fgetc(fp))!='\n' && c!=EOF && a<(COMMENT_SIZE-1)){LS->seq_comment[current][a++]=c;coor++;}
-                         coor++;
-                         
-                         LS->seq_comment[current][a]='\0';
-                         
-                         p=0;
-                         while ((c=fgetc(fp))!='>' && c!=EOF)
-                           {
-                             coor++;
-                             
-                             if (!isspace(c))
-                               {
-                                 if (p==0)LS->dc[current][0]=coor;
-                                 
-                                 if (disk==0)LS->seq[current][p++]=c;
-                                 else p++;
-                               }
-                             
-                             LS->dc[current][1]=coor;
-                           }
-                         coor++;
-                         
-                         if ( disk==0)LS->seq[current][p]='\0';
-                         
-                         if (LS->seq[current] && strm (LS->seq[current], "PDB"))
-                           {
-                             
-                             pdb_name=get_pdb_struc(LS->name[current],0, 0);
-                             pdb_S=get_pdb_sequence (pdb_name);
-                             if (pdb_S)
-                               {
-                                 sprintf ( LS->seq[current], "%s", pdb_S->seq[0]);
-                                 clen=strlen( pdb_S->seq[0]);
-                                 free_sequence ( pdb_S, 1);
-                               }
-                             else
-                               {
-                                 add_warning (stderr, "WARNING: Could not fetch PDB file: %s", pdb_name);
-                               }
-                           }
-                       
-                       
-                         LS->len[current]=p;
-                         current++;            
-                       }
-                       
-               else
-                 {
-                   c=fgetc ( fp);
-                   coor++;
-                 }
-               }
-     
-    vfclose (fp);
-    vfree (sub);
-    vfree (name);
-    vfree (buffer);
-    //LS=clean_sequence (LS);
-   
-    return LS;
-    }
-
-Sequence* get_sub_fasta_sequence (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-    
-    FILE *fp;
-
-    int c;
-    char name[100];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max;
-    int max_len_seq=0;
-    int min_len_seq=0;
-    int nseq=0, l=0;
-    char *buf;
-    
-    
-    
-    int *sub;
-
-    nseq=count_n_char_x_in_file(fname, '>');
-    min_len_seq=max=count_n_char_in_file(fname);
-    sub=vcalloc (max+1, sizeof (int));
-    buf=vcalloc ( max+1, sizeof (char));
-    fp=vfopen (fname,"r");
-
-    
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                       fscanf_seq_name (fp,name);
-                       while ((c=fgetc(fp))!='\n' && c!=EOF);
-                       buf=fgets ( buf,max, fp);
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               if (isalnum (c)|| is_gap(c))
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-                
-               }  
-
-    vfclose (fp);              
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    current=0;
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       
-                       fscanf_seq_name (fp,LS->name[current]);
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==';')LS->name[current][l-1]='\0';
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       while ((c=fgetc(fp))!='\n' && c!=EOF);
-               
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               {
-                               if (isalpha (c))
-                                   LS->seq[current][p++]=tolower (c);
-                               else if (is_gap(c))
-                                   LS->seq[current][p++]=(c);                          
-                               }
-
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-
-                       current++;
-               
-                       }
-                       
-               else
-                   c=fgetc ( fp);
-               }
-                       
-    
-    vfclose (fp);
-    
-
-    vfree (sub);
-    return LS;
-    }
-Sequence* get_pir_sequence (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-
-    FILE *fp;
-    int c;
-
-    char name[100];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=999999;
-    int nseq=0, l=0;
-    char *buf;
-    
-    buf=vcalloc ( 1000, sizeof (char));
-    if ((fp=vfopen (fname,"r"))==NULL)
-        {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-        }  
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='>')
-                       {
-                       if ( (c=fgetc(fp))=='P')while ( (c=fgetc(fp))!=';');
-                       else ungetc ( c, fp);
-                       fscanf_seq_name (fp,name);
-                       
-                       buf=fgets ( buf, 1000, fp);
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               if (isalnum (c)|| is_gap(c))
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        nseq++;
-                       clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-               }
-    vfclose (fp);
-
-
-   
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    
-    current=0;
-    c=fgetc(fp);
-       while (c!=EOF)
-               {
-               if (c=='>')
-                       {
-                       if ( (c=fgetc(fp))=='P')while ( (c=fgetc(fp))!=';');
-                       else ungetc ( c, fp);
-
-                       fscanf_seq_name (fp,LS->name[current]);
-               
-                       l=strlen ( LS->name[current]);
-                       if ( LS->name[current][l-1]==','||LS->name[current][l-1]==',')LS->name[current][l-1]='\0';
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       buf=fgets ( buf, 1000, fp);
-                       
-                       LS->seq_comment[current]=fgets ( LS->seq_comment[current],COMMENT_SIZE-1, fp);
-                       LS->seq_comment[current][strlen(LS->seq_comment[current])-1]='\0';
-                       p=0;
-                       while ((c=fgetc(fp))!='>' && c!=EOF)
-                               if (isalpha (c))
-                                   LS->seq[current][p++]=tolower (c);
-                               else if ( !isspace(c) && c!='*')
-                                   LS->seq[current][p++]=(c);
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-                       current++;
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-
-    vfclose (fp);
-    if (comment_out!=NULL) output_pir_check ( comment_out,LS->nseq, LS->seq_comment);
-    return LS;
-    }
-
-Sequence* get_gor_sequence (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-
-    FILE *fp;
-    int c;
-
-    char name[100];
-    int clen=0;
-    int current=0;
-    int p=0;
-    int max_len_seq=0;
-    int min_len_seq=99999;
-    int nseq=0;
-    char *buf;
-    
-    buf=vcalloc ( 1000, sizeof (char));
-    if ((fp=vfopen (fname,"r"))==NULL)
-        {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-        }  
-    c=fgetc(fp);
-    while (c!=EOF)
-               {
-                if (c=='!')
-                       {
-                       fscanf_seq_name (fp,name);
-                       
-                       buf=fgets ( buf, 1000, fp);
-                       while ((c=fgetc(fp))!='!' && c!=EOF)
-                               if (isalnum (c)|| is_gap(c))
-                                       clen++;
-                        max_len_seq=(clen> max_len_seq)?clen: max_len_seq;
-                        min_len_seq=(clen< min_len_seq)?clen: min_len_seq;
-                        nseq++;
-                       clen=0;
-                       }
-               else
-                   c=fgetc (fp);
-               }
-    vfclose (fp);
-               
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq); 
-    LS->nseq=nseq;
-    
-    fp=vfopen (fname,"r");
-    
-    current=0;
-    c=fgetc(fp);
-       while (c!=EOF)
-               {
-               if (c=='!')
-                       {
-                       
-                      
-                       fscanf_seq_name (fp,LS->name[current]);
-                       LS->name[current]=translate_name ( LS->name[current]);
-                       buf=fgets ( buf, 1000, fp);
-                       
-                       p=0;
-                       while ((c=fgetc(fp))!='!' && c!=EOF)
-                               if (isalnum (c)|| is_gap(c))
-                                   LS->seq[current][p++]=tolower (c);
-                               
-                       LS->seq[current][p]='\0';
-                       LS->len[current]=strlen ( LS->seq[current]);
-                       current++;
-                       }
-               else
-                   c=fgetc ( fp);
-               }
-
-    vfclose (fp);
-
-    return LS;
-    }
-Sequence* get_swissprot_sequence (char *fname, char *comment_out)
-    {
-    Sequence *LS;
-    FILE *fp;
-    int c;
-    char *buf;    
-    int nseq=0;
-    int len, max_len_seq=0, min_len_seq=0;
-    
-    if ( !check_file_exists(fname))
-      {printf ( "\nCOULDN'T OPEN %s",fname);
-         myexit(EXIT_FAILURE);
-      }  
-
-    buf=vcalloc (LONG_STRING+1, sizeof (char));
-    fp=NULL;   
-    while ( (fp=find_token_in_file(fname,fp,"\nSQ")))
-      {
-       nseq++;
-       fgets (buf, LONG_STRING, fp);
-       len=0;
-       while ((c=fgetc(fp))!='/')if(isalpha(c))len++;
-       if ( max_len_seq==0)max_len_seq=min_len_seq=len;
-       else
-         {
-           max_len_seq=MAX(len, max_len_seq);
-           min_len_seq=MIN(len, min_len_seq);
-         }
-      }
-
-    LS=declare_sequence (  min_len_seq,  max_len_seq,nseq);     
-    LS->nseq=0;
-    
-    fp=NULL;
-    while ( (fp=find_token_in_file(fname,fp,"\nID")))
-      {
-       fscanf_seq_name (fp, LS->name[LS->nseq]);
-       fp=find_token_in_file(fname,fp,"\nSQ");
-       fgets (buf, LONG_STRING, fp);
-       while ((c=fgetc(fp))!='/')if (isalpha(c))LS->seq[LS->nseq][LS->len[LS->nseq]++]=c;
-       LS->seq[LS->nseq][LS->len[LS->nseq]]='\0';
-       LS->nseq++;
-      }
-
-   
-    return LS;
-    }
-int fscanf_seq_name ( FILE *fp, char *sname)
-{
-  static char *name;
-  int r;
-  if ( !sname) return 0;
-  
-  if ( !name)name=vcalloc ( 10000, sizeof (char));
-  fscanf (fp, "%s", name);
-  r=strlen (name);
-  if ( strlen (name)>MAXNAMES)
-    add_warning (stderr, "\nWARNING: Seq Name Too long: [%s]. Truncated to %d", name, MAXNAMES);
-  name[MAXNAMES]='\0';
-  sprintf ( sname, "%s", name);
-  return r;
-}
-
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               INPUT ALN                                                 */
-/*                                                                                         */
-/***************************************************************************************** */
-void undump_msa ( Alignment *A, char *tmp)
-{
-  FILE *fp;
-  int m;
-  char *buf;
-  int index;
-  
-  if ( !A || !tmp || !check_file_exists (tmp))return;
-  m=measure_longest_line_in_file (tmp );
-  A=realloc_aln2 ( A,A->max_n_seq,m+1);
-
-  buf=vcalloc (m+1, sizeof (char));
-  fp=vfopen (tmp, "r");
-  while (fscanf (fp, "%d %s\n", &index, buf)==2)
-    {
-      sprintf ( A->seq_al[index], "%s", buf);
-    }
-  vfclose (fp);
-  vfree (buf);
-}
-void dump_msa ( char *file,Alignment *A, int nseq, int *lseq)
-{
-  FILE *fp;
-  int a;
-  fp=vfopen (file, "w");
-  for (a=0; a<nseq; a++)
-    fprintf ( fp, "%d %s\n", lseq[a], A->seq_al[lseq[a]]);
-  vfclose (fp);
-}
-
-void read_aln (char *file_name, Alignment *A)
-{
-  char *tmp_name;
-  Sequence *S;
-  
-
-  tmp_name=vtmpnam (NULL);
-  
-  if (printf_system ( "clustalw_aln2fasta_aln.pl %s > %s",file_name, tmp_name)!=EXIT_SUCCESS)
-    {
-      printf_exit ( EXIT_FAILURE, stderr, "Could Not Read File %s [FATAL:%s]\n", file_name, PROGRAM);
-    }
-  else
-    {
-      S=get_fasta_sequence ( tmp_name,NULL);
-      A=seq2aln (S, A, 0);  
-    }
-  return;
-}
-void read_stockholm_aln (char *file_name, Alignment *A)
-{
-  char *tmp_name;
-  Sequence *S;
-  
-
-  tmp_name=vtmpnam (NULL);
-  if (printf_system ( "clustalw_aln2fasta_aln.pl %s > %s",file_name, tmp_name)!=EXIT_SUCCESS)
-    {
-      printf_exit ( EXIT_FAILURE, stderr, "Could Not Read File %s [FATAL:%s]\n", file_name, PROGRAM);
-    }
-  else
-    {
-      int a;
-      S=get_fasta_sequence ( tmp_name,NULL);
-      for (a=0; a<S->nseq; a++)
-       {
-         if (strstr (S->name[a], "_stockholm"))
-           {
-             substitute ( S->name[a], "_stockholmspace_", " ");
-             substitute ( S->name[a], "_stockholmhasch_", "#");
-           }
-       }
-      A=seq2aln (S, A, 0);  
-    }
-  return;
-}
-Alignment* read_blast_aln ( char *file_name, Alignment *A)
-{
-  char *tmp_name;
-
-  int type;
-
-  
-  if ( !(type=is_blast_file (file_name)))
-    {
-      myexit (EXIT_FAILURE);
-    }
-  tmp_name=vtmpnam ( NULL);
-  if (type==BLAST_TXT)
-    {
-      printf_system("cat %s | blast_aln2fasta_aln.pl | fasta_aln2fasta_aln_unique_name.pl >%s", file_name, tmp_name);
-    }
-  else if (type==BLAST_XML)
-    {
-      
-      printf_system("blast_xml2fasta_aln.pl %s >%s", file_name, tmp_name);
-    }
-
-  main_read_aln (tmp_name, A);
-  return A;
-}
-
-
-void read_number_aln ( char *file_name, Alignment *A)
-   {
-    FILE *fp, *fp2;
-    int * ptr_aln;
-    int a,b,d;
-    int c;
-    char *buf=NULL;
-
-    int tot=0;
-    int flag=0;
-    char *fname;   
-    int n_comment=0;
-
-    int nseq=0;
-    int max_len=0;
-
-    
-    fp=vfopen ( file_name, "r");
-    
-    fname=vtmpnam(NULL);
-    fp2=vfopen ( fname, "w");
-    while ( (c=fgetc(fp))!=EOF)
-       {
-           fprintf ( fp2, "%c", c);
-       }
-    vfclose (fp);
-    vfclose (fp2);
-
-  
-    /*1 Count The number of sequences*/ 
-    fp=vfopen ( fname, "r");
-    buf=vfgets ( buf,fp);
-    if ( !isblanc (buf));
-    while ( isblanc (buf))
-       {
-         buf=vfgets ( buf, fp);
-       }
-    while (!isblanc (buf))
-       {
-       buf=vfgets ( buf,fp);
-       }
-    while ( !isalnum ((c=fgetc(fp))))
-       {       
-       ungetc(c,fp);
-       buf=vfgets ( buf,fp);           
-       }
-    
-    if ( c!='\n')ungetc(c,fp);
-    
-    while ( isalnum ((c=fgetc(fp))))
-       {
-       ungetc(c,fp);           
-       a=0;
-       while ( isgraph ((c=fgetc(fp))));                       
-        nseq++;
-       buf=vfgets ( buf, fp);
-       }    
-    vfclose (fp);
-
-    /*DONE*/
-    /*2 get_max_len*/
-    max_len=count_n_char_in_file(fname)/nseq;
-    A=realloc_alignment2( A, nseq+1, max_len+1);
-
-    /*DONE*/
-        
-   
-    fp=vfopen ( fname, "r");
-    buf=vfgets ( buf, fp);
-    if ( !isblanc (buf))sprintf (A->aln_comment[n_comment++], "%s", buf);
-    while ( isblanc (buf))
-       {
-        buf=vfgets ( buf,fp);          
-       }
-    while (!isblanc (buf))
-       {
-       buf=vfgets ( buf, fp);
-       sprintf ( A->aln_comment[n_comment++], "%s", buf);
-       
-       }
-    while ( !isalnum ((c=fgetc(fp))))
-       {       
-       ungetc(c,fp);
-       buf=vfgets ( buf, fp);
-       
-       }
-    
-    if ( c!='\n')ungetc(c,fp);
-    
-    while ( isalnum ((c=fgetc(fp))))
-       {
-       ungetc(c,fp);
-       
-       fscanf_seq_name (fp, A->name[A->nseq]); 
-
-       if ( name_is_in_list (A->name[A->nseq], A->name, A->nseq, 100)!=-1)
-         {
-           fprintf ( stderr, "\nWARNING (read_number_aln): Sequence %s Duplicated in File %s ", A->name[A->nseq], A->file[A->nseq]);
-           if (!getenv("ALLOW_DUPLICATE"))
-             {
-               fprintf ( stderr, " [FATAL:%s]\n", PROGRAM);
-               myexit (EXIT_FAILURE);
-             }
-         }      
-       A->nseq++;
-       buf=vfgets ( buf,fp);
-       }
-    
-    vfclose (fp);
-  
-    
-     
-    if ((fp=vfopen ( fname, "r"))==NULL)
-       printf ( "\nCOULDN'T READ %s", fname);
-   
-    ptr_aln=vcalloc ( A->nseq, sizeof(int));
-    while ( flag==0)
-       {
-       while (  (c=fgetc(fp))!='\n');
-       if ( (c=fgetc(fp))=='\n')
-           flag=1;
-       }
-    while ( !isalnum(c=fgetc(fp)));
-    ungetc ( c, fp);
-    while ( c!=EOF)
-       {
-       tot=0;
-       while(tot< A->nseq && c!=EOF)
-           {
-            b=0;
-            while ( !isgraph (c=fgetc(fp)) && c!=EOF);
-            if ( c!=EOF)ungetc(c, fp);
-            while ( isgraph((buf[b++]=fgetc(fp))));
-            buf[b-1]='\0';
-            for ( a=-1,d=0; d< A->nseq; d++)
-               if ( strcmp (A->name[d], buf)==0)
-                   {a=d;
-                    tot++;
-                   }
-
-            if ( a==-1) while ( (c=fgetc(fp))!='\n' && c!=EOF);
-            else
-              {
-                while ( (c=fgetc(fp))!='\n')
-                  {
-                    if ( isgraph(c) || is_gap(c))
-                      {if ( isalpha(c))
-                        c=(A->residue_case==2)?c:tolower(c);
-                      
-                      if (!isspace(c))A->seq_al[a][ptr_aln[a]++]=c;
-                      }
-                  }
-              }
-            }
-        while ( !isalnum(c=getc(fp)) && c!=EOF);
-        if ( c!=EOF)
-           ungetc (c, fp);
-        }
-        
-    vfclose (fp);
-    
-   
-    for ( a=0; a< A->nseq; a++)
-       {A->seq_al[a][ptr_aln[a]]='\0';
-        A->order[a][0]=a;
-        A->order[a][1]=0;
-       }
-    
-    A->len_aln= strlen(A->seq_al[0]);  
-    
-    vfree (buf);
-    vfree(ptr_aln);
-    vremove (fname);
-    
-    }          
-void read_amps_aln ( char *in_file, Alignment *A)
-       {
-       FILE *fp;
-       int a, b, c, cont=1;
-       A->nseq=get_amps_seq_name ( A->name, in_file);
-       
-       fp=vfopen ( in_file, "r");
-       fp=set_fp_id(fp, "1*");
-       while ( (c=fgetc(fp))!='\n');
-       b=0;
-       while ( cont==1)
-               {
-               c=fgetc ( fp);
-               c=fgetc(fp);
-               if ( c=='*')
-                       {
-                       cont=0;
-                       for ( a=0; a<A->nseq; a++)
-                               A->seq_al[a][b]='\0';
-                       A->len_aln=b;
-                       }
-                        
-               else
-                       {
-                       ungetc (c, fp);
-                       for ( a=0; a< A->nseq; a++)
-                               {
-                               c=fgetc(fp);
-                               if ( c==' ')A->seq_al[a][b]='-';
-                               else
-                                       {
-                                       A->seq_al[a][b]=c;
-                                       A->len[a]++;
-                                       }
-                               }
-                       while ((c=fgetc(fp))!='\n');
-                       b++;
-                       }
-               }
-       }
-
-
-
-
-
-
-int get_amps_seq_name ( char **name, char* fname)
-       {
-       FILE *fp;
-       int nseq=0;
-       
-       fp=vfopen ( fname, "r");
-       fp=set_fp_id ( fp, "Index");
-       while ( (fgetc(fp))!='\n');
-       while ( isspace(fgetc(fp)))
-               {fscanf (fp, "%*d >%s", name[nseq++]);
-                while ( (fgetc(fp))!='\n');
-               }
-       vfclose ( fp);
-       return nseq;
-       }
-Alignment * read_gotoh_aln ( char *fname, Alignment *A)
-   {
-    FILE *fp;
-    int * ptr_aln;
-    int a,b,d,e;
-
-
-    char *buf;
-    char buf2[VERY_LONG_STRING+1];
-    char buf3[VERY_LONG_STRING+1];
-    char buf4[VERY_LONG_STRING+1];
-
-    int tot=0;
-
-    int l;
-    int nseq, max_len;
-    
-   
-    if ( !check_file_exists (fname))return NULL;
-    fp=vfopen ( fname, "r");
-
-/*1 GET THE NUMBER OF SEQUENCES*/
-    nseq=0;
-    buf=vcalloc ( VERY_LONG_STRING+1, sizeof (char));    
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while (!isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while ( !isblanc ( buf) && buf!=NULL)
-       {
-       a=-1;
-       d=sscanf ( buf, "%d %s %s %s", &a, buf2, A->name[A->nseq],buf3);
-       if ( a!=-1)
-               {
-               if ( name_is_in_list (A->name[A->nseq], A->name, A->nseq, 100)!=-1)
-                 {
-                   fprintf ( stderr, "\nWARNING (get_amps_seq_name): Sequence %s Duplicated in File %s ", A->name[A->nseq], A->file[A->nseq]);
-                   if (!getenv("ALLOW_DUPLICATE"))
-                     {
-                       fprintf ( stderr, " [FATAL:%s]\n", PROGRAM);
-                       myexit (EXIT_FAILURE);
-                     }
-                 }                 
-               nseq++;
-               fgets(buf, VERY_LONG_STRING, fp);
-               }
-       else ( buf=NULL);
-       }
-    vfclose (fp);
-/*2 Get the MAX Len and Reallocate*/
-    max_len=count_n_char_in_file(fname)/nseq;
-    A=realloc_aln2( A, nseq+1, max_len+1);
-/*3 Get The Sequences Names*/
-    A->nseq=0;
-    fp=vfopen ( fname, "r");
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while (!isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while ( !isblanc ( buf) && buf!=NULL)
-       {
-       a=-1;
-       d=sscanf ( buf, "%d %s %s %s", &a, buf2, A->name[A->nseq],buf3);
-       if ( a!=-1)
-               {
-               if ( d==4)sprintf (A->name[A->nseq],"%s", buf3);        
-               A->nseq++;
-               fgets(buf, VERY_LONG_STRING, fp);
-               }
-       else ( buf=NULL);
-       }
-    vfclose (fp);   
-
-/*READ THE ALN*/     
-    fp=vfopen ( fname, "r");
-
-    buf=vcalloc ( VERY_LONG_STRING+1, sizeof (char));; 
-    ptr_aln=vcalloc ( A->nseq, sizeof(int));
-    
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    while (!isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    
-    
-    while ( isblanc (buf=fgets ( buf, VERY_LONG_STRING, fp)));
-    
-    while (buf!=NULL)
-       {
-       tot=0;
-       while(tot< A->nseq)
-           {
-           
-           e=sscanf (buf, "%d %s %s %s", &e, buf2, buf3, buf4);
-           if ( e==4)sprintf( buf3, "%s", buf4);
-           
-           
-           for ( d=0; d< A->nseq; d++)
-               {
-               
-               if ( strcmp (A->name[d], buf3)==0)
-                   {a=d;
-                    tot++;
-                   }
-               }
-            l=strlen (buf2);
-            if ( buf2[l-1]=='|')l--;
-            buf2[l]='\0';
-           
-            for (b=0; b<l; b++)
-               {
-               if ( isgraph (buf2[b]))
-                       A->seq_al[a][ptr_aln[a]++]=(A->residue_case==2)?buf2[b]:tolower (buf2[b]);
-                }
-            buf=fgets(buf, VERY_LONG_STRING, fp);      
-            }
-        if ( buf!=NULL)
-               {
-               buf=fgets(buf, VERY_LONG_STRING, fp);
-               while ( isblanc (buf) && buf!=NULL)
-                       {
-                       buf=fgets ( buf, VERY_LONG_STRING, fp);
-                       }
-               }
-        
-        }
-        
-    vfclose (fp);
-    
-   
-    for ( a=0; a< A->nseq; a++)
-       {A->seq_al[a][ptr_aln[a]]='\0';
-       }
-    
-    A->len_aln= strlen(A->seq_al[0]);  
-    
-   
-    
-    for ( a=0; a< A->nseq; a++)
-       {
-       for ( b=0; b< A->len_aln; b++)
-               A->len[a]+=1-is_gap(A->seq_al[a][b]);
-       }
-    for ( a=0, b=0; a< A->len_aln; a++)
-       {
-       if ( !is_gap(A->seq_al[0][a]) &&!is_gap(A->seq_al[1][a]))b++;
-       }
-    return A;
-    }
-    
-
-
-
-
-void read_msf_aln ( char *fname, Alignment *A)
-   {
-    char command[1000];
-    char *tmp_name;
-    Sequence *S;
-    
-    tmp_name=vtmpnam(NULL);
-    sprintf ( command, "msf_aln2fasta_aln.pl %s > %s", fname, tmp_name);
-
-    if ( my_system (command)!=EXIT_SUCCESS)
-      {
-       fprintf ( stderr, "\nERROR: file %s does not have a legal msf format [FATAL:%s]", fname,PROGRAM);
-       myexit (EXIT_FAILURE);
-      }
-
-    S=get_fasta_sequence ( tmp_name,NULL);
-    A=seq2aln (S, A, 0);  
-    vremove (tmp_name);
-    return;
-    }          
-
-/**************************************************************************************************/
-/*************************************REFORMAT OUT*************************************************/
-/**************************************************************************************************/
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT MATRICES                                           */
-/*                                                                                         */
-/***************************************************************************************** */
-
-
-
-int output_freq_mat ( char *outfile, Alignment *A)
-    { /*
-       function documentation: start
-       
-       int output_freq_mat ( char *outfile, Aligmnent *A)
-
-       This function counts the number of residues in each column of an alignment (Prot)
-       It outputs these values in the following format
-
-       A | 0 0 0 1 0
-       B | 1 0 0 0 1
-       - | 0 1 1 0 0
-
-       This format can be piped into:
-       The routine used for computing the p-value  gmat-inf-gc-v2c
-       
-       function documentation: end
-      */
-      
-    int a, b;
-    int **freq_mat;
-    FILE *fp;
-    
-    
-    freq_mat=aln2count_mat (A);
-            
-    fp=vfopen ( outfile, "w");
-    for ( b=0; b< 26; b++)
-      {
-       fprintf (fp, "%c |", 'A'+b);
-       for ( a=0; a< A->len_aln; a++)fprintf (fp,"%d ", freq_mat[b][a]);
-       fprintf (fp, "\n");
-      }
-    fprintf (fp, "- |");
-    for ( a=0; a< A->len_aln; a++)fprintf (fp,"%d ", freq_mat[26][a]);
-    
-    free_int (freq_mat, -1);
-    vfclose ( fp);
-    return 1;
-    }
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT P-Values                                           */
-/*                                                                                         */
-/***************************************************************************************** */  
-float output_maln_pval ( char *outfile, Alignment *A)
-    {
-      /*
-       function documentation: start
-       float output_maln_pval ( char *outfile, Aligmnent *A)
-
-       This function outputs the p-value of a multiple alignmnet as described 
-       in Hertz, Stormo, Bioinformatics, 15-7/8, 563/577
-           ftp beagle.colorado.edu /pub/cosensus
-       Locally
-           packages/consensus/gmat-inf-gc-v2c
-       
-       
-       The routine used for computing the p-value is the program gmat-inf-gc-v2c
-       function documentation: end
-      */
-
-  
-    char *mat;
-    char *result;
-    FILE *fp;
-    float value;
-    char command[LONG_STRING];
-    char string[STRING];
-    mat=vtmpnam (NULL);
-    result=vtmpnam (NULL);
-    
-    output_freq_mat (mat,A);
-    sprintf ( command, "more %s | gmat-inf-gc-v2c -A abcdefghijklmnopqrstuvwxyz> %s",mat, result);
-    my_system ( command);
-    
-    if ( !check_file_exists(result))return 0;
-    fp=find_token_in_file ( result, NULL, "ln(p-value):");
-    
-    fscanf ( fp, "%s",string);
-    value=atof ( string);
-    vfclose ( fp);
-    
-    vremove ( mat);
-    vremove ( result);
-    
-    fp=vfopen ( outfile, "w");
-    fprintf ( fp, "%.6f\n", value);
-    vfclose ( fp);
-    
-    return value;
-    }
-             
-    
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT WEIGHTS                                            */
-/*                                                                                         */
-/***************************************************************************************** */
-int output_seq_weights ( Weights *W, char *wfile)
-        {
-       FILE*fp;
-       int a;
-       
-       if ( W==NULL)return 0;
-       
-       fp=vfopen (wfile, "w");
-       if ( fp==NULL)return 0;
-       
-       
-       for ( a=0; a< W->nseq; a++)
-               {
-               
-                 fprintf ( fp, "%s %.2f\n", W->seq_name[a],W->SEQ_W[a]);
-               }
-       vfclose ( fp);
-       return 1;
-       }  
-void output_pw_weights4saga ( Weights *W, float **w_list, char *wfile)
-       {
-       FILE*fp;
-       int a, b;
-       fp=vfopen (wfile, "w");
-       
-       fprintf ( fp, "%s\n$\n", W->comments); 
-       for ( a=0; a< W->nseq-1; a++)
-               {
-               for (b=a+1; b< W->nseq; b++)
-                       {
-                       fprintf ( fp, "%s %s %f\n", W->seq_name[a], W->seq_name[b],w_list[a][b]);
-                       }
-               }
-       fprintf ( fp, "$\n");
-       vfclose ( fp);
-       }
-
-FILE * display_weights (Weights *W, FILE *fp)
-{
-  int a;
-  int max_len;
-  
-  if ( W==NULL)
-    {
-      fprintf ( fp, "\n\nUN-WEIGHTED MODE: EVERY SEQUENCE WEIGHTS 1\n");
-      return fp;
-    }
-  fprintf ( fp, "\n\nWEIGHTED MODE:%s\n\n", (W)->mode);
-  for ( a=0, max_len=0; a< W->nseq; a++)max_len=MAX(max_len, strlen (W->seq_name[a]));
-  for ( a=0; a< (W->nseq); a++)
-    {
-      fprintf ( fp, "\t%*s %.2f\n", max_len,(W)->seq_name[a],W->SEQ_W[a]);
-    }
-  fprintf ( fp, "\n");
-  return fp;
-}
-
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT SEQ                                                */
-/*                                                                                         */
-/***************************************************************************************** */
-int ** input_similarities (char *file, Alignment *A, char *mode)
-{
-  int a, b, i, n;
-  int **sim;
-  float score;
-  char name[1000];
-  FILE *fp=NULL;
-  char *buf1=NULL, *buf2=NULL;
-  int new_aln=0;
-  
-
-  
-  if ( !check_file_exists (file) || !is_distance_matrix_file (file) ||!is_similarity_matrix_file (file) )
-    {
-      return NULL;
-    }
-  
-  if ( A)
-    {
-      fp=vfopen (file, "r");
-      while ((buf2=vfgets (buf1,fp))!=NULL )
-       {
-         if (strstr (buf2, "SEQ_INDEX"))
-           {
-             buf1=buf2;
-             sscanf (buf1, "# SEQ_INDEX %s %d",name, &i);
-             if ( !strm (A->name[i], name))
-               {
-                 return NULL;
-               }
-           }
-       }
-      vfclose (fp);
-    }
-  else
-    {
-  
-      A=similarities_file2aln(file);
-      new_aln=1;
-    }
-  
-  sim=declare_int ( A->nseq, A->nseq);
-  for ( a=0; a<A->nseq; a++)sim[a][a]=100;
-  
-  
-  fp=find_token_in_file (file, NULL, "PW_SEQ_DISTANCES");
-  fp=find_token_in_file (file, fp, "BOT");
-  while ((buf2=vfgets (buf1,fp))!=NULL )
-    {
-      if ( !(strstr (buf2, "BOT\t") || strstr (buf2, "TOP\t")))continue;
-      buf1=buf2;
-      n=sscanf (buf1, "%*s %d %d %f", &a, &b, &score);
-      if ( n!=3)
-       {
-         free_int (sim, -1);
-         return NULL;
-       }
-      else sim[a][b]=sim[b][a]=(int)score;
-    }
-  vfclose (fp);
-  vfree (buf1);
-  if (new_aln)free_aln(A);
-  return sim;
-}
-
-Alignment * similarities_file2aln ( char *file)
-{
-  int nseq=0, i;
-  FILE *fp;
-  char name[1000];
-  Alignment *A;
-  
-
-  fp=vfopen (file, "r");
-  while ((fp=find_token_in_file (file,fp, "SEQ_INDEX")))nseq++;
-  A=declare_aln2 (nseq+1, 10);
-  
-  while ((fp=find_token_in_file (file,fp, "SEQ_INDEX")))
-    {
-      fscanf (fp, "%s %d", name,&i);
-      sprintf ( A->name[i], "%s", name);
-    }
-  A->nseq=nseq;
-
-  return A;
-}
-  
-void output_similarities (char *file, Alignment *A, char *mode)
-{
-  float s;
-  float *tot;
-  float bigtot=0;
-  int n, max;
-  FILE *fp;
-  int a, b;
-  char *p;
-  int **M=NULL;
-  for (max=0, a=0; a< A->nseq; a++)max=MAX(max,(strlen (A->name[a])));
-  
-
-  tot=vcalloc ( A->nseq, sizeof (float));
-  fp=vfopen (file, "w");
-  fprintf (fp, "# TC_SIMILARITY_MATRIX_FORMAT_01\n");
-  for ( a=0; a<A->nseq; a++)
-    fprintf ( fp, "# SEQ_INDEX %s %d\n",A->name[a],a);
-  fprintf ( fp, "# PW_SEQ_DISTANCES \n");
-  for (n=0,a=0;a< A->nseq-1; a++)
-    {
-      for ( b=a+1; b<A->nseq; b++, n++)
-       {
-          if (strstr (mode, "_sarmat2"))
-           {
-             s=get_sar_sim (A->seq_al[a], A->seq_al[b]);
-           }
-         else if (strstr (mode, "_sar"))
-           {
-             s=get_sar_sim (A->seq_al[a], A->seq_al[b]);
-           }
-         else if ( (p=strstr (mode, "_memory_")))
-           {
-             int **sim;
-             sscanf ( p, "_memory_%ld", (long int*)&sim);
-             s=sim[a][b];
-           }
-         else if ( strstr (mode, "_idscore") || strstr ( mode, "_covscore"))
-           {
-             static Sequence *S;
-             if (a==0 && b==1)
-               {
-                 free_sequence (S, -1);
-                 if ( strstr (mode, "idscoreDNA"))
-                   M=read_matrice ("idmat");
-                 else
-                   M=read_matrice("blosum62mt");
-             
-                 S=aln2seq(A);
-               }
-             if ( strstr (mode, "_idscore"))s=idscore_pairseq(S->seq[a], S->seq[b], -10,-1, M, "sim");
-             else            s=idscore_pairseq(S->seq[a], S->seq[b], -10,-1, M, "cov");
-           }
-         else if ( strstr (mode, "cov"))
-           {
-             s=get_seq_sim ( A->seq_al[a], A->seq_al[b],GAP_LIST, "cov");
-           }
-         else
-           {
-             s=get_seq_fsim2 (A->seq_al[a], A->seq_al[b],GAP_LIST, mode);
-           }
-         fprintf (fp, "BOT\t %4d %4d\t %5.2f %*s\t %*s\t %5.2f\n", a,b,s,max,A->name[a], max, A->name[b], s);
-         fprintf (fp, "TOP\t %4d %4d\t %5.2f %*s\t %*s\t %5.2f\n", b,a,s,max,A->name[b], max, A->name[a], s);
-         tot[a]+=s;
-         tot[b]+=s;
-         bigtot+=s;
-       }
-    }
-  for ( a=0; a< A->nseq; a++)
-    {
-      fprintf (fp, "AVG\t %d\t %*s\t %*s\t %5.2f\n", a,max,A->name[a], max, "*", tot[a]/(A->nseq-1));
-      
-    }
-  vfree (tot);free_int (M, -1);
-  fprintf (fp, "TOT\t %*s\t %*s\t %5.2f\n", max,"TOT", max, "*", bigtot/n);
-  vfclose (fp);
-}
-
-void output_similarities_pw (char *file, Alignment *A, Alignment *B,char *mode)
-{
-  float s;
-  float *tot;
-  float bigtot=0;
-  int n, max;
-  FILE *fp;
-  int a, b;
-
-  int **M=NULL;
-  Sequence *SA, *SB;
-  
-  if ( strstr (mode, "idscoreDNA"))
-    M=read_matrice ("idmat");
-  else
-    M=read_matrice("blosum62mt");
-  
-  SA=aln2seq(A);
-  SB=aln2seq(B);
-   
-  for (max=0, a=0; a< A->nseq; a++)max=MAX(max,(strlen (A->name[a])));
-  for (a=0; a< B->nseq; a++)max=MAX(max,(strlen (B->name[a])));
-  
-
-  tot=vcalloc ( A->nseq, sizeof (float));
-  fp=vfopen (file, "w");
-  fprintf (fp, "# TC_SIMILARITY_MATRIX_FORMAT_01\n");
-  for ( a=0; a<A->nseq; a++)
-    fprintf ( fp, "# SEQ_INDEX %s %d\n",A->name[a],a);
-  fprintf ( fp, "# PW_SEQ_DISTANCES \n");
-  for (n=0,a=0;a< A->nseq; a++)
-    {
-      for ( b=0; b<B->nseq; b++, n++)
-       {
-         s=idscore_pairseq(SA->seq[a], SB->seq[b], -10,-1, M, "sim");
-         fprintf (fp, "BOT\t %4d %4d\t %5.2f %*s\t %*s\t %5.2f\n", a,b,s,max,A->name[a], max, B->name[b], s);
-         fprintf (fp, "TOP\t %4d %4d\t %5.2f %*s\t %*s\t %5.2f\n", b,a,s,max,B->name[b], max, A->name[a], s);
-         tot[a]+=s;
-         tot[b]+=s;
-         bigtot+=s;
-       }
-    }
-  
-  for ( a=0; a< A->nseq; a++)
-    {
-      fprintf (fp, "AVG\t %d\t %*s\t %*s\t %5.2f\n", a,max,A->name[a], max, "*", tot[a]/(A->nseq-1));
-    }
-  vfree (tot);free_int (M, -1);
-  fprintf (fp, "TOT\t %*s\t %*s\t %5.2f\n", max,"TOT", max, "*", bigtot/n);
-  vfclose (fp);
-}
-void output_conservation_statistics ( char *file, Alignment *A)
-{
-  int a, b, c,c1, c2;
-  double **tot;
-  char aa[1000];
-  int naa;
-  
-  sprintf (aa, "%s", BLAST_AA_ALPHABET);
-  naa=strlen (aa);
-  
-  tot=declare_double (256, 256);
-  
-  
-  for ( a=0; a<A->nseq; a+=2)
-    {
-      b=a+1;
-      for ( c=0; c<A->len_aln; c++)
-       {
-         c1=tolower (A->seq_al[a][c]);
-         c2=tolower (A->seq_al[b][c]);
-         if ( !is_gap(c1) && !is_gap(c2))
-           {
-             tot[c1][c2]++;
-             tot[c2][c1]++;
-             tot[c1][0]++;
-             tot[c2][0]++;
-             tot[0][0]++;
-           }
-       }
-    }
-  
-  fprintf ( stdout, "# BLAST_MATRIX FORMAT\n#ALPHABET=%s\n",aa);
-  for (a=0; a<naa; a++)fprintf ( stdout, "%3c ", toupper(aa[a]));
-  fprintf ( stdout, "\n");
-  for (a=0; a< naa; a++)
-    {
-      fprintf (stdout, "%c", toupper(aa[a]));
-      for ( b=0; b< naa; b++)
-       {
-         float f1, f2, f3, r, v;
-         c1=tolower(aa[a]);c2=tolower(aa[b]);
-         f1=(float)((tot[c1][c2]*2)/tot[0][0]);
-         f2=(float)((tot[c1][0])/tot[0][0]);
-         f3=(float)((tot[c2][0])/tot[0][0]);
-         r=(float)(f2==0 || f3==0)?0:(f1/(f2*f3));
-         v=(r==0)?0:((float)10*log((double)r));
-         fprintf (stdout, " %5d",(int)v);
-       }
-      fprintf ( stdout, "\n");
-    }
-}
-void output_statistics (char *file, Alignment *A, char *mode)
-    {
-      FILE *fp;
-      int a, b, c, d=0, n;
-      int maxname=0;
-
-      
-      if (!mode || !mode[0])
-       mode="hnrglNL";
-      else if ( mode[0]=='_')
-       mode++;
-      for ( a=0; a<A->nseq; a++)maxname=MAX(strlen(A->name[a]), maxname);
-      maxname++;
-      
-      
-      fp=vfopen (file, "w");
-      
-      if (mode[0]=='h')
-       {
-         b=0;
-         while ((c=mode[b++])!='\0')
-           {
-             if ( c=='n') fprintf (fp, "%-*s ",maxname,"name");
-             if ( c=='l') fprintf (fp, "%-*s ",5,"nres");
-             if ( c=='g') fprintf (fp, "%-*s ",5,"ngap");
-             if ( c=='t') fprintf (fp, "%-*s ",5,"len");
-           }
-         if (is_in_set ( c, "nlgt"))     fprintf (fp, "\n");
-         mode++;
-       }
-      b=0;
-      while ((c=mode[b++])!='\0')
-       {
-         if ( c=='n')break;
-         if ( c=='N'){d=1;fprintf (fp, "NSEQ %d ", A->nseq);}
-         if ( c=='L'){d=1;fprintf (fp, "LEN  %d ", A->len_aln);}         
-       }
-      if ( d) fprintf (fp, "\n");
-      
-      for (a=0; a<A->nseq; a++)
-       {
-         b=0;
-         d=0;
-         while ((c=mode[b++])!='\0')
-           {
-             if (is_in_set ( c, "nlgt"))d=1;
-
-             if (c=='n'){d=1;fprintf ( fp, "%-*s ", maxname,A->name[a]);}
-             if (c=='l')
-               {
-                 for (n=0,d=0; d<A->len_aln; d++)n+=!is_gap(A->seq_al[a][d]);
-                 fprintf ( fp, "%-5d ",n);
-               }
-             if (c=='g')
-               {
-                 for (n=0,d=0; d<A->len_aln; d++)n+=((is_gap(A->seq_al[a][d]) && !is_gap(A->seq_al[a][d+1]))||(is_gap(A->seq_al[a][d])&& A->seq_al[a][d+1]=='\0')) ;
-                 fprintf ( fp, "%-5d ",n); 
-               }
-             if (c=='t')
-               {
-                 fprintf ( fp, "%-5d ",(int)strlen (A->seq_al[a]));             
-               }
-              if (c=='N' && d)
-               {
-                fprintf ( fp, "%-5d ",A->nseq);                 
-               }
-             if (c=='L'&& d)
-               {
-                fprintf ( fp, "%-5d ",A->len_aln);              
-               }
-           }
-         if (d)fprintf ( fp, "\n"); 
-       }
-      vfclose (fp);
-    }
-
-int output_age_matrix ( char *outfile, int val)
-{
-  int **mat;
-  int a, b;
-  char alp[]="abcdefghij-";
-  int naa;
-  
-  mat=declare_int ( 256, 256);
-  naa=strlen (alp);
-  for ( a=0; a<naa; a++)
-    for ( b=0; b<naa; b++)
-      {
-       if (is_gap(alp[a]) ||is_gap(alp[b] ))mat[(int)alp[a]][(int)alp[b]]=((val==0)?1:val)*-1;
-       else mat[(int)alp[a]][(int)alp[b]]=(FABS((a-b))*-1)*((val==0)?1:val);
-       
-      }
-  output_mat ( mat,outfile, alp, 0);
-  free_arrayN((void**)mat, 2);
-  return 1;
-}
-     
-
-
-
-int output_transitions(char *outfile, Alignment *A)
-{
-  double table[256][256];
-  double symbols[256];
-  double tot, l, freq, expected, log_odd;
-  int a, b;
-  char *s;
-  char *alp;
-  int naa=0;
-  int **mat;
-  float **fmat;
-  
-  FILE *fp;
-  
-  for ( a=0; a< 256; a++)
-    for (b=0; b<256; b++) 
-      {
-       symbols[b]=0;
-       table[a][b]=0;
-      }
-  alp=vcalloc ( 256, sizeof (char));
-  mat=declare_int ( 256,256);
-  fmat=declare_float ( 256,256);
-  
-  for (tot=0,a=0; a< A->nseq; a++)
-    {
-      ungap (A->seq_al[a]);
-      lower_string (A->seq_al[a]);
-      s=A->seq_al[a];
-      l=strlen (s);
-      if ( s[0]=='\0') continue;
-      symbols[(int)s[0]]++;
-      for ( b=1; b< l; b++)
-       {
-         symbols[(int)s[b]]++;
-         table[(int)s[b-1]][(int)s[b]]++;
-         tot++;
-       }
-    }
-  for (naa=0, a=0; a< 256; a++)
-    {
-      if (symbols[a])alp[naa++]=a;
-    }
-  
-      
-  for ( a=0; a< 256; a++)
-    for (b=0; b<256; b++) 
-      {
-       if (symbols[a]&& symbols[b] && table[a][b] && tot>0)
-         {
-           freq=(table[a][b])/tot;
-           expected=(symbols[a]*symbols[b])/(tot*tot);
-           log_odd=log (freq/expected);
-           mat[a-'A'][b-'A']=log_odd*10;
-           fmat[a-'A'][b-'A']=log_odd;
-         }
-       else if ( symbols[a]&& symbols[b])
-         {
-           mat[a-'A'][b-'A']=-999;
-           fmat[a-'A'][b-'A']=-999;
-         }
-      }
-  output_mat ( mat,outfile, alp, 'A');
-  
-  fp=vfopen (outfile, "a");
-  for ( a=0; a<256; a++)
-    if ( symbols[a])
-      {
-       fprintf (fp, "# %c tot: %6d freq: %7.5f\n", a, (int)symbols[a],(float)symbols[a]/tot);
-      }
-  
-  for ( a=0; a< 256; a++)
-    for (b=0; b<256; b++) 
-      {
-       if (symbols[a]&& symbols[b])
-         {
-           freq=(table[a][b])/tot;
-           fprintf (fp, "# %c%c tot: %6d freq: %7.5f log_odd: %9.3f\n", a, b, (int)table[a][b],(float)freq,fmat[a-'A'][b-'A']);                    
-         }
-      }
-  vfclose (fp);
-  vfree(alp);
-  free_arrayN ((void **)mat, 2);
-  free_arrayN ((void **)fmat, 2);
-  
-  return 1;
-}
-
-
-
-void output_est_prf   (char *fname, Alignment *A)
-        {
-       int a;
-       FILE *fp;
-
-       if ( !A->P)
-         {
-           fprintf ( stderr, "\nFormat output_est_prf Impossible: No profile\n");
-           myexit(EXIT_FAILURE);
-         }
-       
-
-       fp=vfopen ( fname, "w");
-       fprintf ( fp, "Consensus Sequence\nReconstructed with %s (%s,%s)\n",PROGRAM,AUTHOR,DATE);
-       fprintf ( fp, "%4c %4c %4c %4c %15s    Consensus\n",  'A','G','C','T', "Internal Gaps");
-
-       for ( a=0; a< A->len_aln; a++)
-         {
-           fprintf (fp, "%4d %4d %4d %4d %15d %c\n", (A->P)->count[0][a],(A->P)->count[1][a],(A->P)->count[2][a], (A->P)->count[3][a], (A->P)->count[4][a],A->seq_al[0][a]);
-         }
-       return;
-       }
-
-         
-void output_gotoh_seq (char *fname, Alignment*A )
-       {
-       int a;
-       FILE *fp;
-               
-       fp=vfopen ( fname, "w");
-       fprintf ( fp, "%d %d\n",A->nseq, A->max_len);
-       for ( a=0; a< A->nseq; a++)
-               {
-               ungap ( A->seq_al[a]);
-               fprintf ( fp, ">%s\n", A->name[a]);
-               fp=output_string_wrap ( 50,A->seq_al[a] , fp);
-               fprintf ( fp, "//\n");
-               }
-               
-       vfclose (fp);
-       }           
-
-void output_mult_fasta_seq (char *fname, Alignment*A, int n )
-       {
-       int a;
-       FILE *fp;
-       
-       fp=vfopen (fname, "w");
-       ungap(A->seq_al[0]);
-       for (a=0; a<n; a++)
-         {
-           fprintf (fp, ">%s_%d\n%s\n", A->name[0],a+1, A->seq_al[0]);
-         }
-       vfclose (fp);
-       }
-int output_wexons (char *name, Alignment *A)
-{
-  int a,b,c;
-  FILE *fp;
-  int **w;
-  fp=vfopen (name, "w");
-  if (!fp) return 0;
-  if (!A) {vfclose(fp);return 0;}
-  w=A->score_res;
-  if (!w) {vfclose (fp);return 0; }
-  
-  for (a=0; a<A->nseq; a++)
-    {
-      fprintf (fp, ">%s\n", A->name[a]);
-      for (c=0,b=0; b<A->len_aln; b++)
-       {
-         int r;
-         r=A->seq_al[a][b];
-         if (!is_gap(r) && r!='f' && r!='F')
-           {
-             fprintf (fp, " %c %d ", r,w[a][c++]);
-           }
-         else if (!is_gap(r))fprintf (fp,"%c -1 ",r);
-       }
-      fprintf (fp, "\n");
-    }
-  return 1;
-}
-char * output_fasta_seqX (char *name, char *mode, Sequence *S, Alignment *A, int i)
-{
-  FILE *fp;
-  
-  if (!name)name=vtmpnam (NULL);
-  fp=vfopen (name, mode);
-  if ( (S && S->nseq<=i) || (A && S->nseq<=i) || (!A && !S))
-    {
-      fprintf ( stderr, "\nERROR in function reformat:output_fasta_seqX[FATAL:%s]", PROGRAM);
-      myexit (EXIT_FAILURE);
-    }
-
-  else if ( S) 
-    fprintf ( fp, ">%s %s\n%s\n", S->name[i], S->seq_comment[i], S->seq[i]);
-  else if ( A)
-    {
-      ungap (A->seq_al[i]);
-      fprintf ( fp, ">%s %s\n%s\n", A->name[i], A->seq_comment[i], A->seq_al[i]);
-    }
-  vfclose (fp);
-  return name;
-}
-
-void output_fasta_seq1 (char *fname, Alignment*A )
-       {
-       char seq_name[VERY_LONG_STRING];
-       int a;
-       FILE *fp;
-       char *extension;
-       
-       for ( a=0; a< A->nseq; a++)
-               {
-               if ( strncmp( fname, "name",4)==0)
-                 {
-                   if ( (fname+4)[0]!='\0')extension=fname+5;
-                   else
-                     extension=NULL;
-                   
-                    sprintf ( seq_name,"%s.%s", A->name[a],(extension==NULL)?"seq":extension);
-                 }
-               else
-                  sprintf ( seq_name,"%s.seq",A->name[a]);
-               
-               ungap ( A->seq_al[a]);
-               fp=vfopen (seq_name, "w");
-               fprintf (fp, ">%s %s\n", A->name[a], A->seq_comment[a]);
-               fp=output_string_wrap ( 50, A->seq_al[a],fp);
-               fprintf ( fp, "\n");
-               vfclose (fp);
-               }
-       }
-void output_pir_check (char *fname,int nseq, char **comment )
-       {
-       int a;
-       FILE *fp;
-       
-       if ( fname==NULL)return;
-       fp=vfopen ( fname, "w");
-       
-       for ( a=0; a< nseq; a++)fprintf (fp, "%s\n", comment[a]);
-       vfclose (fp);
-       }
-void output_fasta_seqS (char *fname, Sequence *S)
-{
-  Alignment *A;
-  A=seq2aln (S,NULL,RM_GAP);
-  output_fasta_seq (fname, A);
-  free_aln (A);
-}
-
-void output_fasta_seq (char *fname, Alignment*A)
-{
-  main_output_fasta_seq (fname, A, HEADER);
-}
-void output_fasta_tree (char *fname, Alignment*A)
-       {
-       int a;
-       FILE *fp;
-       if ( !A || !A->nseq) return;
-       
-       fp=vfopen ( fname, "w");
-       
-       for ( a=0; a< A->nseq; a++)
-               {
-                 fprintf ( fp, ">%s %s\n%s\n", A->name[a], A->seq_comment[a], A->seq_al[a]);
-               }
-       vfclose (fp);
-       }
-void main_output_fasta_seq (char *fname, Alignment*A,int header )
-       {
-       int a;
-       FILE *fp;
-       
-       fp=vfopen ( fname, "w");
-
-       for ( a=0; a< A->nseq; a++)
-               {
-               ungap(A->seq_al[a]);
-               fprintf ( fp, ">%s", A->name[a]);
-               if (header==HEADER && A->seq_comment[a][0] && !isblanc(A->seq_comment[a]))fprintf (fp," %s\n",A->seq_comment[a]);
-               else fprintf ( fp, "\n");
-               fp=output_string_wrap ( 50, A->seq_al[a],fp);
-               fprintf ( fp, "\n");
-               }
-       vfclose (fp);
-       }    
-void output_gor_seq (char *fname, Alignment*A )
-       {
-       int a;
-       FILE *fp;
-       
-       fp=vfopen ( fname, "w");
-       
-       for ( a=0; a< A->nseq; a++)
-               {
-               ungap(A->seq_al[a]);
-               fprintf ( fp, "!%s %d \n", A->name[a], (int)strlen(A->seq_al[a]));
-               upper_string ( A->seq_al[a]);
-               fp=output_string_wrap ( 50, A->seq_al[a],fp);
-               fprintf ( fp, "@\n");
-               }
-       vfclose (fp);
-       }    
-void output_pir_seq (char *fname, Alignment*A )
-       {
-       int a;
-       for ( a=0; a< A->nseq; a++)ungap(A->seq_al[a]);
-       output_pir_aln (fname, A);
-       } 
-void output_pir_seq1 (char *fname, Alignment*A )
-       {
-       char seq_name[VERY_LONG_STRING];
-       int a;
-       FILE *fp;
-       char type[20];
-
-       
-       for ( a=0; a< A->nseq; a++)
-               {
-               if      ( strm ( get_string_type (A->seq_al[a]),"DNA") || strm ( get_string_type (A->seq_al[a]),"RNA"))sprintf(type, "DL");
-               else if ( strm ( get_string_type (A->seq_al[a]),"PROTEIN"))sprintf(type, "P1"); 
-               sprintf ( seq_name,"%s;%s_%s.seq",type, fname,A->name[a]);
-               ungap ( A->seq_al[a]);
-               fp=vfopen (seq_name, "w");
-               fprintf (fp, ">%s\n\n", A->name[a]);
-               fp=output_string_wrap ( 50, A->seq_al[a],fp);
-               fprintf ( fp, "\n*\n");
-               vfclose (fp);
-               }
-       } 
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               OUTPUT ALN                                                */
-/*                                                                                         */
-/***************************************************************************************** */
-void output_mocca_aln (char *outfile, Alignment *A, Alignment *S)
-    {
-    FILE *fp;
-    int **score;
-    char **new_name_order;
-    int a, maxl;
-
-    score=declare_int (S->nseq, 2);
-    new_name_order=declare_char ( S->nseq,MAXNAMES+1); 
-    for ( a=0; a<A->nseq; a++)
-      {
-       score[a][0]=a;
-       score[a][1]=S->score_seq[a];
-      }
-    sort_int_inv (score+1,2,1,0,S->nseq-2);
-    for ( a=0; a<A->nseq; a++)
-      {
-       sprintf ( new_name_order[a], "%s", A->name[score[a][0]]);
-      }
-    A=reorder_aln (A, new_name_order, A->nseq);
-
-    fp=vfopen (outfile, "w");
-    fprintf ( fp, "MOCCA,(%s,%s, C. Notredame)\nSCORE %d\nNSEQ  %d\nLEN   %d\n",VERSION,DATE, A->score_aln, A->nseq, A->len_aln);     
-    
-    maxl=return_maxlen ( new_name_order, A->nseq); 
-    
-   
-    for (a=0; a< A->nseq; a++)
-      {
-       fprintf (fp, "%-*s: %3d\n", maxl, A->name[a], score[a][1]);
-      }
-    
-    fprintf ( fp, "\n");
-    
-    fp=output_Alignment_without_header ( A, fp);
-    vfclose (fp);
-    free_int  (score, -1);
-    free_char (new_name_order, -1);
-    return ;
-    }
-  
-void print_sub_aln ( Alignment *B, int *ns, int **ls)
-{
-  Alignment *X;
-  int a, b;
-
-  X=copy_aln (B, NULL);
-  X->nseq=0;
-  X->len_aln=strlen ( B->seq_al[ls[0][0]]);
-
-
-  for (a=0; a< 2; a++)
-    for ( b=0; b<ns[a]; b++, X->nseq++)
-      {
-       sprintf ( X->seq_al[X->nseq], "%s", B->seq_al[ls[a][b]]);
-       sprintf ( X->name[X->nseq], "%s", B->name[ls[a][b]]);
-      }
-  X->name[X->nseq][0]='\0';
-  
-  print_aln (X);
-  free_aln (X);
-}
-void print_aln ( Alignment *B)
-    {
-      
-    while(B)
-      {
-       output_Alignment_without_header ( B, stderr);
-       B=B->A;
-      }
-    }
-
-
-FILE * output_aln ( Alignment *B, FILE *fp){return output_Alignment(B, fp);}
-FILE * output_Alignment ( Alignment *B, FILE *fp)
-    {
-      fprintf ( fp, "%s, %s (%s) [%s] [MODE: %s]\n%s\nCPU   %d sec\nSCORE %d\nNSEQ  %d\nLEN   %d\n",PROGRAM,VERSION,DATE,retrieve_mode(),URL,AUTHOR,  (B->cpu+get_time())/1000, B->score_aln, B->nseq, B->len_aln);     
-     
-      return output_Alignment_without_header ( B, fp);
-    }
-  
-FILE * output_Alignment_without_header ( Alignment *B, FILE *fp)
-    {
-    int a,b, c;
-    int max_len=0;
-    int line;      
-    int *n_residues;
-    char s;
-
-    
-    if (fp==NULL)return fp;
-    for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           }
-    max_len=MAX(max_len+2, 16);
-    line=get_msa_line_length (0, 0);
-    n_residues=vcalloc ( B->nseq+1, sizeof (int));
-    for ( a=0; a<B->nseq; a++)n_residues[a]=(B->output_res_num==2)?B->order[a][1]:0;
-    
-    
-    
-    
-  fprintf ( fp, "\n"); 
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<=B->nseq; b++)
-            {
-              fprintf (fp,"%-*s",max_len,B->name[b]);
-              if (B->output_res_num)fprintf (fp, " %4d ", n_residues[b]+1);
-              for (c=a;c<a+line && c<B->len_aln;c++)
-                {
-                  if (b==B->nseq){n_residues[b]++;s=analyse_aln_column ( B, c);}
-                  else 
-                    {n_residues[b]+=!is_gap(B->seq_al[b][c]);
-                      s=GET_CASE(B->residue_case, B->seq_al[b][c]);
-                    }
-                  
-                  fprintf (fp,"%c",s );
-                               }
-              if (B->output_res_num)fprintf (fp, " %4d", n_residues[b]);
-              fprintf (fp,"\n");
-            }
-            
-            fprintf (fp,"\n");
-          }
-    
-     fprintf (fp,"\n\n");
-     vfree (n_residues);
-     
-     return fp;
-    }
-FILE * output_aln_score ( Alignment *B, FILE *fp){return output_Alignment_score(B, fp);}
-FILE * output_Alignment_score ( Alignment *B, FILE *fp)
-    {
-    int a, b, c;
-    static int max_len=0;
-    static int line;       
-    int ch;
-    
-    if (fp==NULL)return fp;
-    if ( max_len==0)
-       {
-       for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           }
-       max_len+=4;
-
-       }       
-   line=get_msa_line_length(0, 0);
-   sprintf (B->name[B->nseq], "CONS"); 
-   fprintf ( fp, "T_COFFEE ALIGNMENT\nCPU TIME:%d sec.\n", (B->cpu+get_time())/1000);  
-   fprintf ( fp, "SCORE=%d\n", B->score_aln);
-   for ( a=0;a<B->nseq; a++)fprintf ( fp, "%s: %d\n", B->name[a], B->score_seq[a]);
-   fprintf ( fp, "\n"); 
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-             {
-             fprintf (fp,"%-*s",max_len,B->name[b]);
-             for (c=a;c<a+line && c<B->len_aln;c++)
-               {
-               ch=B->seq_al[b][c];
-               if (ch==NO_COLOR_RESIDUE)fprintf (fp,"-");
-               else if ( ch==NO_COLOR_GAP)fprintf (fp,"*");
-               else if ( ch<10 && ch>=0)fprintf (fp,"%d",ch);
-               else if ( ch>10)fprintf (fp,"#");
-               else if ( ch<0)fprintf  (fp,".");
-               else fprintf (fp,"9");          
-               }             
-             fprintf (fp,"\n");              
-             }
-           fprintf (fp,"\n");
-           fprintf (fp,"%-*s",max_len,B->name[b]);
-           for (c=a;c<a+line && c<B->len_aln;c++)
-             {
-             ch=B->seq_al[b][c];
-             if (ch==NO_COLOR_RESIDUE)fprintf (fp,"-");
-             else if ( ch==NO_COLOR_GAP)fprintf ( fp, "*");
-             else if ( ch<10 && ch>=0)fprintf (fp,"%d",ch);
-             else if ( ch>10)fprintf (fp,"#");
-             else if ( ch<0)fprintf (fp,".");
-             else fprintf (fp,"9");            
-             }       
-           fprintf (fp,"\n\n\n");
-          }
-    fprintf (fp,"\n\n");
-    return fp;
-    }
-FILE * output_aln_with_res_number ( Alignment *B, FILE *fp){return  output_Alignment_with_res_number(B, fp);}
-FILE * output_Alignment_with_res_number ( Alignment *B, FILE *fp)
-    {
-    int a, b, c;
-    static int max_len=0;
-    static int line;       
-    int**order;
-
-    if (fp==NULL)return fp;
-    if ( max_len==0)
-       {
-       for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           }
-       max_len+=4;
-       line=60;
-       }       
-   order=copy_int ( B->order,declare_int ( B->nseq, 2), B->nseq, 2);
-    
-   fprintf ( fp, "T_COFFEE ALIGNMENT\nCPU TIME:%d sec.\n", (B->cpu+get_time())/1000);     
-   fprintf ( fp, "\n"); 
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-            {
-             fprintf (fp,"%-*s %3d %4d ",max_len,B->name[b], order[b][0], order[b][1] );
-             for (c=a;c<a+line && c<B->len_aln;c++)
-               {
-               order[b][1]+=1-is_gap(B->seq_al[b][c]);
-               fprintf (fp,"%c",toupper(B->seq_al[b][c]) );
-               }
-             fprintf (fp," %4d\n", order[b][1] );
-             }
-           fprintf (fp,"\n");
-           }
-    fprintf (fp,"\n\n");
-
-    free_int (order, -1);
-    return fp;
-    }
-
-void output_constraints ( char *fname, char *mode,Alignment *A)
-       {
-       FILE *fp;
-       Constraint_list *CL;
-       char *buf;
-       char **name_list;
-       
-       if ( !A->CL || strm ( mode, "pdb"))
-          {
-              if (!A->S)
-                 {
-                     A->S=aln2seq(A);
-                 }
-              
-              CL=declare_constraint_list ( A->S, NULL, NULL, 0, NULL, NULL);
-              CL=aln2constraint_list (A,CL, mode);
-              fp=save_constraint_list ( CL, 0, CL->ne,fname, NULL, "lib",A->S);
-              vfclose (fp);
-              free_constraint_list (CL);
-              return;
-          }
-       else if ( strncmp ( mode, "extended_pair", 13)==0)
-         {
-           buf=duplicate_string (mode+14);
-           
-           name_list=vcalloc(2, sizeof(char*));
-           name_list[0]=strtok (buf,"_");
-           name_list[1]=strtok (NULL,"_");
-           mode[13]='\0';
-           
-       
-           CL=A->CL;
-           fp=save_sub_list_header (vfopen(fname, "w"),2, name_list,CL);
-           fp=save_extended_constraint_list_pair (CL, "pair",name_list[0],name_list[1],fp);
-           fp=save_list_footer (fp, CL);
-           vfree (buf);
-         }
-       else if ( strm2 (mode, "extended_lib","extended_cosmetic"))
-         {
-           CL=A->CL;
-           fp=save_extended_constraint_list ( CL,mode+9, vfopen(fname, "w"));
-         }
-       else 
-          {
-              CL=(Constraint_list *)A->CL;
-              fp=save_constraint_list ( CL, 0, CL->ne,fname, NULL, "lib",A->S);
-          }
-       vfclose ( fp);
-       
-       if ( (Constraint_list *)A->CL !=CL)free_constraint_list (CL);
-
-       return;
-
-       }
-void output_model_aln (char *fname, Alignment*A )
-        {
-         FILE *fp;
-         int a;
-         Dp_Model *M;
-         Dp_Result *R;
-         char *string;
-         
-         if ( A->Dp_result==NULL)
-           {
-             fprintf ( stderr, "\nWARNING Could Not Output Model %s [%s]", fname, PROGRAM);
-           }
-         R=A->Dp_result;
-         M=R->Dp_model;
-
-         fp=vfopen ( fname, "w");
-         for (a=0; a<M->nstate; a++)
-           {
-             if (M->model_comments[a][0])fprintf ( fp, "#STATE %c: %s\n", 'a'+a, M->model_comments[a]);
-           }
-         string=vcalloc ( R->len+1, sizeof (char));
-         for (a=0; a<R->len; a++)string[a]=R->traceback[a]+'a';
-         fprintf ( fp, ">%s\n",fname);
-         fp=output_string_wrap ( 50,string, fp);
-         vfree(string);
-         fprintf ( fp, "\n");
-       
-         vfclose (fp);
-         return;
-       }
-char * output_fasta_sub_aln (char *fname, Alignment*A, int ns, int *ls  )
-{
-  int a,s;
-  FILE *fp;
-  if (fname==NULL)fname=vtmpnam (NULL);
-  fp=vfopen (fname, "w");
-  for (a=0; a<ns; a++)
-    {
-      s=ls[a];
-      fprintf (fp, ">%s %s\n%s\n", A->name[s],A->seq_comment[s],A->seq_al[s]);
-    }
-  vfclose (fp);
-  return fname;
-}
-char * output_fasta_sub_aln2 (char *fname, Alignment*A, int *ns, int **ls  )
-{
-  int a,g,s;
-  FILE *fp;
-  if (fname==NULL)fname=vtmpnam (NULL);
-  fp=vfopen (fname, "w");
-  for ( g=0; g<2; g++)
-    for (a=0; a<ns[g]; a++)
-      {
-       s=ls[g][a];
-       fprintf (fp, ">%s %s\n%s\n", A->name[s],A->seq_comment[s],A->seq_al[s]);
-      }
-  vfclose (fp);
-  return fname;
-}
-
-int output_suchard_aln (char *out_file, Alignment *A)
-{
-  int a, b, c, d;
-  FILE *fp;
-  
-  A=back_translate_dna_aln (A);
-  
-  for ( c=0,a=0; a<A->len_aln; a++, c++)
-            {
-              if (c==3)c=0;
-              for (b=0; b<A->nseq; b++)
-                {
-                if (c==2)
-                  {
-                    A->seq_al[b][a]='-';
-                  }
-                }
-            }
-  A=ungap_aln_n (A, 1);    
-  fp=vfopen (out_file, "w");
-  for ( a=0; a< A->nseq; a++)
-    {
-      for (b=0; b< A->len_aln; b++)
-       {
-         c=tolower(A->seq_al[a][b]);
-         if ( c=='a')d=1;
-         else if ( c=='g')d=2;
-         else if ( c=='c')d=3;
-         else if ( c=='t')d=4;
-         else if ( c=='u')d=5;
-         else d=6;
-
-         fprintf ( fp, "%d", d);
-       }
-      fprintf ( fp, "\n");
-    }
-  vfclose (fp);
-  myexit (EXIT_SUCCESS);
-}
-  
-void output_fasta_aln (char *fname, Alignment*A )
-       {
-       FILE *fp;
-       int a;
-       int line=0;
-
-       line=get_msa_line_length (line, A->len_aln+1);
-       fp=vfopen ( fname, "w");
-
-       for ( a=0; a< A->nseq; a++)
-               {
-                 fprintf ( fp, ">%s", A->name[a]);
-                 
-                 if ( A->seq_comment[a][0] && !isblanc (A->seq_comment[a]))fprintf ( fp, " %s", A->seq_comment[a]);
-                 fprintf ( fp, "\n");
-                 fp=output_string_wrap ( line,A->seq_al[a] , fp);
-                 fprintf ( fp, "\n");
-               }
-       vfclose (fp);
-       }
-       
-void output_pir_aln (char *fname, Alignment*A )
-       {
-       int a;
-       FILE *fp;
-       char type[20];
-       
-       
-
-       
-       
-       fp=vfopen ( fname, "w");
-       for ( a=0; a< A->nseq; a++)
-               {
-               if      ( strm ( get_string_type (A->seq_al[a]),"DNA") || strm ( get_string_type (A->seq_al[a]),"RNA"))sprintf(type, "DL");
-               else if ( strm ( get_string_type (A->seq_al[a]),"PROTEIN"))sprintf(type, "P1");
-               fprintf ( fp, ">%s;%s\n%s\n",type, A->name[a], A->seq_comment[a]);
-               fp=output_string_wrap ( 50,A->seq_al[a] , fp);
-               fprintf ( fp, "\n*\n");
-               }
-               
-       vfclose (fp);
-       }           
-
-int landscape_msa;
-int  set_landscape_msa (int len)
-{
-  if ( len==0)landscape_msa=-1;
-  else
-    {
-      landscape_msa=len;
-    }
-  return landscape_msa;
-}
-int get_msa_line_length (int line, int aln_len)
-{
-  if (landscape_msa==-1) return aln_len;
-  else if ( landscape_msa)return landscape_msa;
-  else if (line) return line;
-  else 
-    {
-      return (getenv ("ALN_LINE_LENGTH"))?atoi(getenv("ALN_LINE_LENGTH")):ALN_LINE_LENGTH;
-    }
-}
-
-void output_msf_aln (char *fname,Alignment *B)
-        {
-       int a, b, c;    
-       char *seq;
-       int *all_checks;
-       int i,j;
-       long grand_checksum;
-       FILE *fp;
-       int max_len;
-       int line=0;
-       int block=10;
-       int c_block;
-       char aa;
-       
-
-       line=get_msa_line_length (line, B->len_aln+1);
-       
-
-       for ( max_len=0,a=0; a< B->nseq; a++)max_len= MAX(strlen ( B->name[a]),max_len);
-
-
-       max_len+=5;
-       
-       fp=vfopen (fname, "w");
-       
-       seq =vcalloc(B->len_aln,  sizeof(char));
-       all_checks =vcalloc(B->nseq, sizeof(int));
-       for ( i=0; i< B->nseq; i++)
-         {
-           for ( j=0; j<B->len_aln; j++)
-             {
-               if ( is_gap(B->seq_al[i][j]))seq[j]='.';
-               else seq[j]=B->seq_al[i][j]=toupper(B->seq_al[i][j]);
-               
-             }
-           all_checks[i] = SeqGCGCheckSum(seq, (int)B->len_aln);
-         }
-       grand_checksum = 0;
-       for(i=0; i<B->nseq; i++) grand_checksum += all_checks[i];
-       grand_checksum = grand_checksum % 10000;
-       fprintf(fp,"PileUp\n\n");
-       B=get_aln_type(B);
-       fprintf(fp,"\n\n   MSF:%5d  Type: ",B->len_aln);
-       if(strm ( (B->S)->type, "DNA") || strm ( (B->S)->type, "RNA"))
-               fprintf(fp,"N");
-       else
-               fprintf(fp,"P");
-       fprintf(fp,"    Check:%6ld   .. \n\n", (long)grand_checksum);
-       for (i=0; i< B->nseq; i++)
-         {
-           fprintf ( fp, " Name: %s oo  Len:%5d  Check:%6ld  Weight:  %.3f\n", B->name[i], B->len_aln,(long)all_checks[i],(B->S)->W?((B->S)->W)->SEQ_W[i]:1.00);
-         }
-       fprintf(fp,"\n//\n\n");
-       
-       for (a=0; a<B->len_aln; a+=line)
-          {
-            fprintf ( fp,"\n\n"); 
-            for (b=0; b<B->nseq; b++)
-              {
-                fprintf (fp,"%-*s ",max_len,B->name[b]);
-                for (c_block=0,c=a;c<a+line && c<B->len_aln;c++)
-                  {
-                    if ( c_block==block)
-                           {
-                             fprintf (fp, " ");
-                             c_block=0;
-                           }
-                       c_block++;
-                    aa=(is_gap(B->seq_al[b][c]))?'.': toupper(B->seq_al[b][c]);
-                    fprintf (fp,"%c",aa );
-                  }
-                if ( c_block==block)
-                           {
-                             fprintf (fp, " ");
-                             c_block=0;
-                           }
-                fprintf (fp,"\n");
-                
-              }
-          }
-       fprintf ( fp,"\n");              
-       vfclose ( fp);
-       
-       
-       vfree(seq);
-       vfree(all_checks);
-       
-
-       return;
-} 
-int SeqGCGCheckSum(char *seq, int len)
-{
-       int  i;
-        long check;
-        
-        for( i=0, check=0; i< len; i++,seq++)
-                check += ((i % 57)+1) * toupper(*seq);
-
-        return(check % 10000);
-}  
-void old_output_msf_aln (char *fname,Alignment *B)
-       {
-       FILE *fp;
-       static int *put_seq;
-       int a, b, c;
-       int line=0;
-       char aa;
-       char *buf;
-       int max_len;
-       int seq_max_len;
-       
-       line=get_msa_line_length (line, B->len_aln+1);
-       
-       
-       for ( max_len=0,a=0; a< B->nseq; a++)max_len= MAX(strlen ( B->name[a]),max_len);
-       for ( seq_max_len=0,a=0; a< B->nseq; a++)seq_max_len= MAX(strlen ( B->seq_al[a]),max_len);
-       
-
-       buf=vcalloc(seq_max_len+1, sizeof (int)); 
-       
-       if ( put_seq==NULL)
-               put_seq= vcalloc ( B->nseq, sizeof (int));
-       put_seq[0]=1;
-       
-       
-       for ( b=1; b< B->nseq; b++)
-               {
-               sprintf ( buf, "%s", B->seq_al[b]);
-               ungap(buf);
-               put_seq[b]=( strlen (buf)>0)?1:0;
-               }       
-       
-       fp=vfopen ( fname, "w");
-       fprintf ( fp, "MSF: %d Type P Check: 5083 ..\n", B->len_aln);
-       for ( a=0; a< B->nseq; a++)
-               {
-               if ( put_seq[a]==1)
-                       fprintf ( fp,"Name: %s\n",B->name[a]);
-               }
-        fprintf ( fp, "//\n");
-        for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-            {
-            if ( put_seq[b]==1)
-               {
-               fprintf (fp,"%-*s ",max_len,B->name[b]);
-               for (c=a;c<a+line && c<B->len_aln;c++)
-                       {
-                       
-                         
-                           
-                       aa=(B->seq_al[b][c]=='-')?'.': toupper(B->seq_al[b][c]);
-                       fprintf (fp,"%c",aa );
-                       }
-               fprintf (fp,"\n");
-               }
-             }
-           fprintf (fp,"\n");
-           }
-       fprintf ( fp,"\n\n");            
-       vfclose ( fp);
-
-       vfree (buf);
-       vfree(put_seq);
-       }
-       
-void output_saga_aln ( char *name, Alignment *B)
-    {
-    int a, b, c;
-    FILE *fp;
-
-
-
-    int max_len;
-    int line=0;
-    
-    line=get_msa_line_length (line, B->len_aln+1);
-    
-    
-    
-    for ( max_len=0,a=0; a< B->nseq; a++)max_len= (strlen ( B->name[a])>max_len)?(strlen ( B->name[a])):max_len;
-           
-       
-
-
-    fp= vfopen ( name, "w");
-    
-    fprintf (fp, "\nSAGA FORMAT\nalignement  %s nseq=%d len=%d\n", name, B->nseq, B->len_aln);
-       
-    fprintf (fp, "\n\n");
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-            {fprintf (fp,"%-*s ",max_len,B->name[b]);
-             for (c=a;c<a+line && c<B->len_aln;c++)
-               {
-                 fprintf (fp,"%c",(B->seq_al[b][c]) );
-               }
-             fprintf (fp,"\n");
-             }
-           fprintf (fp,"\n");
-           }
-    fprintf (fp,"\n\n");
-    vfclose ( fp);
-    }
-void output_compact_aln ( char *name, Alignment *B)
-    {
-    int a, b, c;
-    FILE *fp;
-    int do_print=0;
-
-
-    int max_len;
-    int line=0;
-
-    line=get_msa_line_length (line, B->len_aln+1);
-    
-    
-    for ( max_len=0,a=0; a< B->nseq; a++)max_len= (strlen ( B->name[a])>max_len)?(strlen ( B->name[a])):max_len;
-           
-       
-
-
-    fp= vfopen ( name, "w");
-    
-    fprintf (fp, "\nSAGA FORMAT\nalignement  %s nseq=%d len=%d", name, B->nseq, B->len_aln);
-    fprintf (fp, "\n\n");
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-            {
-            
-            for ( do_print=0, c=a;c<a+line && c<B->len_aln;c++)
-              do_print+=1-is_gap(B->seq_al[b][c]);
-            if ( do_print>0)
-                  {
-                    fprintf (fp,"%-*s ",max_len,B->name[b]);
-            
-            
-            
-                    for (c=a;c<a+line && c<B->len_aln;c++)
-                      {
-                        if ( is_gap(B->seq_al[b][c])&& B->seq_al[b][c]!='-' )fprintf (fp,"%c", '-');
-                        else fprintf (fp,"%c",(B->seq_al[b][c]) );
-                      }
-                    fprintf (fp,"\n");
-                  }
-             }
-           fprintf (fp,"\n");
-           }
-    fprintf (fp,"\n\n");
-    vfclose ( fp);
-    }
-
-void output_clustal_aln ( char *name, Alignment *B)
-{
-  return output_generic_clustal_aln (name, B, "tc_clustal");
-}
-void output_strict_clustal_aln ( char *name, Alignment *B)
-{
-  return output_generic_clustal_aln (name, B, "strict_clustal");
-}
-
-void output_generic_clustal_aln ( char *name, Alignment *B, char *mode)
-    {
-    int a, b, c;
-    FILE *fp;
-    int max_len=0;
-    int line=0;        
-    int *n_residues;
-    
-    if ( getenv ("SEP_4_TCOFFEE"))
-      {
-       while ( line<B->len_aln && B->seq_al[0][line]!='o' && B->seq_al[0][line]!='O')line++;
-       if ( B->seq_al[0][line]=='O' || B->seq_al[0][line]=='o')line++;
-      }
-    else
-      {
-       while ( line<B->len_aln)line++;
-      }
-    
-    if ( line==B->len_aln)line=get_msa_line_length (0, B->len_aln+1);
-    
-    n_residues=vcalloc ( B->nseq+1, sizeof (int));
-    for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           n_residues[a]=B->order[a][1];
-           }
-    max_len=MAX(max_len+2, 16);
-        
-
-    fp= vfopen ( name, "w");
-
-    if ( strm (mode, "strict_clustal"))
-      fprintf ( fp, "CLUSTAL W (1.83) multiple sequence alignment");
-    else
-      {
-       fprintf (fp, "CLUSTAL FORMAT for %s %s [%s] [MODE: %s ], CPU=%.2f sec, SCORE=%d, Nseq=%d, Len=%d ", PROGRAM, VERSION,URL, retrieve_mode (),(float)(B->cpu+get_time())/1000, B->score_aln, B->nseq, B->len_aln);
-       if (B->ibit>0)
-         {
-           float ibit=(float)log ((double)B->ibit)/log ((double)2);
-           float nibit=(float)log(ibit/(B->len_aln*B->nseq));
-           fprintf ( fp, "\nTies: %.1f bits (%d alternative)\n",ibit, B->ibit-1);
-         
-         }
-      }
-    fprintf (fp, "\n\n");
-
-
-    if ( B->len_aln==0)
-      {
-       for (b=0; b<=B->nseq; b++)
-         fprintf (fp,"%-*s -\n",max_len, B->name[b]);
-      }
-    
-    else
-      {
-       for (a=0; a<B->len_aln; a+=line)
-         {for (b=0; b<=B->nseq; b++)
-           {
-             if (b!=B->nseq)
-               {
-                 fprintf (fp,"%-*s",max_len, B->name[b]);
-                 for (c=a;c<a+line && c<B->len_aln;c++)
-                   {
-                     if ( is_gap(B->seq_al[b][c]))fprintf (fp,"%c", '-');
-                     else 
-                       {
-                         n_residues[b]++;
-                         fprintf (fp, "%c", GET_CASE(B->residue_case, B->seq_al[b][c]));
-                         
-                       }
-                     
-                   }
-                 if (B->output_res_num)fprintf (fp, " %d", n_residues[b]);
-                 fprintf (fp,"\n");
-               }
-             else if ( b==B->nseq)
-               {
-                 fprintf (fp,"%-*s",max_len," ");                  
-                 for (c=a;c<a+line && c<B->len_aln;c++)
-                   {
-                     fprintf ( fp, "%c", analyse_aln_column (B, c));
-                   }
-                 fprintf (fp,"\n");
-               }
-           }
-         fprintf (fp,"\n"); 
-         }
-      }
-    fprintf (fp,"\n\n");
-    vfree (n_residues);
-    vfclose ( fp);
-    }    
-FILE * output_generic_interleaved_aln (FILE *fp, Alignment *B, int line, char gap, char *mode)
-    {
-    int a, b, c;
-    int max_len=0;
-    int *n_residues;
-    
-    
-    n_residues=vcalloc ( B->nseq+1, sizeof (int));
-    for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           n_residues[a]=B->order[a][1];
-           }
-    max_len=MAX(max_len+2, 16);
-        
-
-    
-    
-    if ( B->len_aln==0)
-      {
-       for (b=0; b<=B->nseq; b++)
-         fprintf (fp,"%-*s -\n",max_len, B->name[b]);
-      }
-    
-    else
-      {
-       for (a=0; a<B->len_aln; a+=line)
-         {for (b=0; b<=B->nseq; b++)
-           {
-             if (b!=B->nseq)
-               {
-                 fprintf (fp,"%-*s",max_len, B->name[b]);
-                 for (c=a;c<a+line && c<B->len_aln;c++)
-                   {
-                     if ( is_gap(B->seq_al[b][c]))fprintf (fp,"%c", gap);
-                     else 
-                       {
-                         n_residues[b]++;
-                         fprintf (fp, "%c", GET_CASE(B->residue_case, B->seq_al[b][c]));
-                         
-                       }
-                     
-                   }
-                 if (B->output_res_num)fprintf (fp, " %d", n_residues[b]);
-                 fprintf (fp,"\n");
-               }
-           }
-         fprintf (fp,"\n"); 
-         }
-      }
-    vfree (n_residues);
-    return fp;
-    }    
-void output_phylip_aln ( char *name, Alignment *B)
-    {
-      int a, b, c, d;
-    FILE *fp;
-
-    int *print_name;
-    static int line=0;     
-    line=get_msa_line_length(0, 0);
-    
-    print_name=vcalloc ( B->nseq, sizeof (int));
-    fp= vfopen ( name, "w");
-    
-    fprintf (fp, "%3d %d\n", B->nseq, B->len_aln);
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<B->nseq; b++)
-            {if ( print_name[b]==0)
-               {
-                 
-                 fprintf (fp,"%-10.10s  ",B->name[b]);
-                 print_name[b]=1;
-               }
-              else
-                {
-                  fprintf (fp, "%10.10s ", " ");
-                }
-
-
-              for (d=0,c=a;c<a+line && c<B->len_aln;c++, d++)
-                {
-                  if ( d==10)
-                    {
-                      fprintf ( fp, " ");
-                      d=0;
-                    }
-                  if ( is_gap(B->seq_al[b][c])&& B->seq_al[b][c]!='-' )fprintf (fp,"%c", '-');
-                  else fprintf (fp,"%c",(B->seq_al[b][c]) );
-                }
-             fprintf (fp,"\n");
-             }
-           fprintf (fp,"\n");
-           }
-    fprintf (fp,"\n\n");
-    vfclose ( fp);
-    }
-
-void output_rnalign (char *out_file, Alignment *A, Sequence *STRUC)
-    {
-    int a, b;
-    FILE *fp;
-    char bank_file[100];
-    char pep_file[100];
-    char *buf;
-    
-    sprintf ( bank_file, "%s.mss", out_file);
-    sprintf ( pep_file, "%s.one_rna", out_file);
-    
-   
-    buf=vcalloc ( strlen ( A->seq_al[0]+1), sizeof (char));
-    
-    for ( b=0,a=0; a< strlen(A->seq_al[0]); a++) 
-       {
-       if ( is_gap(A->seq_al[0][a]))
-               buf[a]='.';
-       else
-               buf[a]=STRUC->seq[0][b++];
-       }
-    buf[a]='\0';
-    
-    fp=vfopen ( bank_file, "w");
-    
-    fprintf ( fp, "ST\n");
-    fp=output_string_wrap ( 50, buf, fp);
-    fprintf ( fp, "\n\n");
-    
-    for ( a=0; a<A->nseq-1; a++)
-       {
-       fprintf ( fp, "AS %s\n ", A->name[a]);
-       fp=output_string_wrap ( 50, A->seq_al[a], fp); 
-       fprintf ( fp, "\n\n");
-       }
-    vfclose ( fp);
-    fp=vfopen ( pep_file, "w");
-    fprintf ( fp, ">%s\n", A->name[A->nseq-1]); 
-    fp=output_string_wrap ( 50, A->seq_al[A->nseq-1], fp);
-    fprintf ( fp, "\n");
-    vfclose (fp);
-    }
-
-void output_lib (char *pw_lib_saga_aln_name, Alignment *A )
-    {
-    Alignment *B;
-    char fname[VERY_LONG_STRING];
-    int a,b;
-    
-    B=declare_Alignment (NULL);
-    
-    B->nseq=2;
-    
-    for ( a=0; a< A->nseq-1; a++)
-       {
-       for ( b=a+1; b<A->nseq; b++)
-               {
-               sprintf ( B->seq_al[0], "%s", A->seq_al[a]);
-               sprintf ( B->name[0], "%s", A->name[a]);
-               sprintf(B->name[1], "%s", A->name[b]);
-               sprintf ( B->seq_al[1], "%s",A->seq_al[b]);
-               B->nseq=2;
-               sprintf ( fname, "%s_%s_%s.lib",pw_lib_saga_aln_name, A->name[a], A->name[b]);
-       
-               B->len_aln=strlen ( B->seq_al[0]);
-               ungap_aln (B);
-               output_clustal_aln (fname,B);  
-               }
-        }
-    } 
-void output_pw_lib_saga_aln (char *pw_lib_saga_aln_name, Alignment *A )
-    {
-    Alignment *B;
-    char fname[VERY_LONG_STRING];
-    int a,b;
-    
-    B=declare_Alignment (NULL);
-    
-    B->nseq=2;
-    
-    for ( a=0; a< A->nseq-1; a++)
-       {
-       for ( b=a+1; b<A->nseq; b++)
-               {
-               sprintf ( B->seq_al[0], "%s", A->seq_al[a]);
-               sprintf ( B->name[0], "%s", A->name[a]);
-               sprintf(B->name[1], "%s", A->name[b]);
-               sprintf ( B->seq_al[1], "%s",A->seq_al[b]);
-               B->nseq=2;
-               sprintf ( fname, "%s_%s_%s.pw_lib_saga_aln",pw_lib_saga_aln_name, A->name[a], A->name[b]);
-       
-               B->len_aln=strlen ( B->seq_al[0]);
-               ungap_aln (B);
-               output_clustal_aln (fname,B);  
-               }
-        }
-    }  
-void output_lalign_header( char *name, Alignment *A)
-    {
-    FILE *fp;
-    
-    fp=vfopen ( name, "w");
-    fprintf ( fp, " Lalign mode: best local alignments between two sequences\n");
-    fprintf ( fp, " %s(%s) [%s]\n\n", VERSION, DATE, URL);
-    fprintf ( fp, " Comparison of:\n(A) %s\t%s\t-%d aa\n", (A->S)->file[A->order[0][0]],(A->S)->name[A->order[0][0]], (A->S)->len[A->order[0][0]]);
-    fprintf ( fp, "(B) %s\t%s\t-%d aa\n", (A->S)->file[A->order[1][0]],(A->S)->name[A->order[1][0]], (A->S)->len[A->order[1][0]]);
-    
-    
-    vfclose ( fp);
-    return;
-    }
-void output_stockholm_aln (char *file, Alignment *A, Alignment *ST)
-{
-  FILE *fp;
-  int a,b;
-    
-  for (a=0; a<A->nseq; a++)
-    for (b=0; b<A->len_aln; b++)
-      if (A->seq_al[a][b]==STOCKHOLM_CHAR)A->seq_al[a][b]='.';
-  
-  fp=vfopen (file, "w");
-  fprintf ( fp, "# STOCKHOLM 1.0\n\n");
-  output_generic_interleaved_aln (fp,A, 50, '.', NULL);
-  fprintf ( fp, "//\n");
-  vfclose (fp);
-}
-                          
-void output_glalign ( char *name, Alignment *B, Alignment *S)
-{
-  int a, b, g, s;
-  int naln=0;
-  FILE *fp;
-  int **nr;
-  B=B->A;
-  if ( B==NULL){return;}
-  
-  fp=vfopen (name, "w");
-  fprintf (fp, "Format: GLALIGN_01 [Generated with %s ]\n", PROGRAM);
-  fprintf (fp, "#Each Line corresponds to a column\n");
-  fprintf (fp, "#First column coresponds to first genome\n");
-  fprintf (fp, "#Last Column gives the column reliability on a 0-9 scale\n");
-  fprintf (fp, "#[-1] Indicates that the reliability was not evaluated\n");
-  
-  fprintf (fp, "Genome List\n");
-  for ( a=0; a< B->nseq; a++)
-    fprintf (fp, "\tGenome %s\n", B->name[a]);
-  fprintf (fp, "Alignment List\n");
-  while (B)
-    {
-      fprintf (fp, "Alignment %d Len %d Score %d\n", ++naln, B->len_aln, S->score_aln);
-      nr=duplicate_int (B->order, -1, -1);
-      for ( a=0; a< B->len_aln; a++)
-       {
-         fprintf ( fp, "\t");
-         for ( b=0; b< B->nseq; b++)
-           {
-             g=is_gap (B->seq_al[b][a]);
-             nr[b][1]+=1-g;
-
-             if (g)fprintf (fp, "---- ");
-             else fprintf ( fp, "%4d ",nr[b][1]);
-           }
-         s=((S)?S->seq_al[S->nseq][a]:-1);
-         if (s==NO_COLOR_RESIDUE)s=-1;
-         fprintf ( fp,"[ %d ]",s);
-         fprintf ( fp, "\n");  
-         
-       } 
-      free_int (nr, -1);
-      B=B->A;
-      S=S->A;
-    }
-  vfclose ( fp);
-}
-Alignment *input_conc_aln ( char *name, Alignment *IN)
-{
-  FILE *fp;
-  char *string, *p, *file;
-  Alignment *F=NULL,*A=NULL, *B=NULL;
-  
-  file=vtmpnam (NULL);
-  string=file2string(name);
-  string=substitute ( string, "@", "!Protected!");
-  string=substitute ( string, TC_REC_SEPARATOR, "@");
-  strtok (string,"@");
-  
-
-  while ( (p=strtok (NULL,"@"))!=NULL)
-    {
-      char *buf;
-      buf=vcalloc ( strlen (p)+1, sizeof (char));
-      sprintf (buf,"%s", p);
-      buf=substitute (buf,"!protected!", "@");
-      
-      fp=vfopen (file, "w");
-      fprintf ( fp, "%s",buf);
-      vfclose (fp);
-      vfree (buf);
-            
-      if ( is_aln (file))
-       {
-         B=main_read_aln (file,NULL);
-         
-         if ( !A)
-           {
-             if (IN){copy_aln (B, IN);F=A=IN;}
-             else F=A=B;
-           }
-         else
-           {
-             A->A=B;
-             A=A->A;
-           }
-       }
-    }
-  
-  vfree (string);
-  return F;
-}
-
-void output_conc_aln ( char *name, Alignment *B)
-{
-  FILE *fp;
-  int a;
-  
-  fp=vfopen (name, "w");
-  fprintf (fp, "# CONC_MSF_FORMAT_01\n");
-  while (B)
-    {
-      fprintf (fp, "%s\n", TC_REC_SEPARATOR);
-      for ( a=0; a< B->nseq; a++)
-       {
-         fprintf ( fp, ">%s\n%s\n", B->name[a], B->seq_al[a]);
-       }
-      B=B->A;
-      
-    }
-  vfclose (fp);
-}
-
-void output_lalign ( char *name, Alignment *B)
-{
-  static int output_header;
-  B=B->A;
-  if ( B==NULL){output_header=0;return;}
-    else if ( output_header==0)
-      {
-       output_lalign_header(name, B);
-       output_header=1;
-      }
-  while (B)
-    {
-      output_lalign_aln   ( name, B);
-      B=B->A;
-    }
-}
-void output_lalign_aln   ( char *name, Alignment *B)
-    {
-    int a, b, c,d=0, s=0;
-    char col;
-
-    float tot=0;
-    float id=0;
-
-    FILE *fp;
-    int max_len=0;
-    int line;  
-    int *n_residues;
-    int res;
-
-       
-    n_residues=vcalloc ( B->nseq+1, sizeof (int));
-    for ( a=0; a< B->nseq; a++)
-           {if ( strlen (B->name[a])>max_len)
-               max_len= strlen ( (B->name[a]));
-           n_residues[a]=B->order[a][1];
-           }
-    max_len=MAX(max_len+2, 16);
-    line=60;
-    
-    
-
-    fp= vfopen ( name, "a");
-    
-    for (a=0; a< B->len_aln; a++)
-      {
-        if ( !is_gap(B->seq_al[0][a]) && !is_gap(B->seq_al[1][a]))
-            {
-              tot++;
-              id+=(B->seq_al[0][a]==B->seq_al[1][a]);
-            }
-      }
-    
-    id=(id*100)/tot;
-    fprintf (fp, " %.1f%% identity in %d aa overlap; score: %d\n\n", id,(int)tot, B->score_aln);
-    
-    
-    for (a=0; a<B->len_aln; a+=line)
-          {for (b=0; b<5; b++)
-            {
-                if ( b==0 || b==4)
-                  {
-                    if ( b==0)s=0;
-                    if ( b==4)s=1;
-                    fprintf (fp,"%-*s",max_len," ");
-                    for (d=0,c=a;c<a+line && c<B->len_aln;c++)
-                      {
-                        res=!is_gap ( B->seq_al[s][c]);
-                        n_residues[s]+=res;
-                        if ( (n_residues[s]%10)==0 && res && (c-a+4)<line){fprintf (fp, "%-4d", n_residues[s]);d=-3;}  
-                        else
-                          {
-                            if ( d==0)fprintf (fp, " ");
-                            else d++;
-                          }
-                      }
-                    fprintf (fp,"\n");
-                  }
-                else if (b==1 || b==3)
-                   {
-                     if ( b==1)s=0;
-                     if ( b==3)s=1;
-                       fprintf (fp,"%-*s",max_len, B->name[s]);
-                       for (c=a;c<a+line && c<B->len_aln;c++)
-                           {
-                               if ( is_gap(B->seq_al[s][c]))fprintf (fp,"%c", '-');
-                               else 
-                                   {
-                                       fprintf (fp, "%c", GET_CASE(B->residue_case, B->seq_al[s][c]));
-                                   }
-                           }
-                       fprintf (fp,"\n");
-                   }
-                else if ( b==2)
-                   {
-                   fprintf (fp,"%-*s",max_len," ");                
-                   for (c=a;c<a+line && c<B->len_aln;c++)
-                           {
-                           col=analyse_aln_column (B, c);
-                           if ( col=='*')col=':';
-                           else if ( col==':')col='.';
-                           else if ( col=='.')col=' ';
-                           fprintf ( fp, "%c", col);
-                           }
-                   fprintf (fp,"\n");
-                   }
-            }
-          fprintf (fp,"\n"); 
-          }
-    
-    fprintf (fp,"\n\n----------\n\n");
-    vfree (n_residues);
-    vfclose ( fp);
-    }   
-
-
-/****************************************************************************************************/
-/*************************************UTIL *********************************************************/
-/**************************************************************************************************/
-
-
-/****************************************************************************************************/
-/***************************                                    *************************************/
-/***************************             PROCESSING            *************************************/
-/***************************                                    *************************************/
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                              THREADING                                                  */
-/***************************************************************************************** */
-
-char *thread_aa_seq_on_dna_seq( char *s)
-     {
-        int l, b, c;
-        char *array;
-        
-
-        l=strlen ( s);
-        array=vcalloc ( l*3 +1, sizeof (char));
-        for ( b=0, c=0; b< l; b++, c+=3)
-            {
-                array[c]=s[b];
-                array[c+1]='o';
-                array[c+2]='o';
-            }
-        array[c]='\0';
-        return array;
-     }
-
-Alignment *thread_dnaseq_on_prot_aln (Sequence *S, Alignment *A)
-        {
-           Alignment *B=NULL;
-           int a, b, c, n, la, ls, ln, m;
-
-           B=copy_aln ( A, B);
-           B=realloc_aln2 ( B, B->nseq, B->len_aln*3 +1);
-
-           for ( n=0,a=0; a< A->nseq; a++)
-               {
-               for ( m=0,b=0; b< S->nseq; b++)
-                   {
-                   if (strm (A->name[a], S->name[b]) )
-                      {
-                          m=1;
-                          n++;
-                          ungap ( S->seq[b]);
-                          B->seq_al[a][0]='\0';
-                          for (la=0, ls=0, ln=0; la< A->len_aln; la++)
-                              {
-                                  for (c=0; c< 3; c++)
-                                      B->seq_al[a][ls++]=(is_gap(A->seq_al[a][la]))?'-':S->seq[b][ln++];
-                              }
-                      B->seq_al[a][ls]='\0';
-                      }
-                   }
-               if ( m==0)
-                      {
-                      for (la=0, ls=0, ln=0; la< A->len_aln; la++)
-                              {
-                               
-                                  B->seq_al[a][ls++]=A->seq_al[a][la];
-                                  B->seq_al[a][ls++]='-';
-                                  B->seq_al[a][ls++]='-';
-                              }
-                      }
-               }
-           
-           B->len_aln=strlen ( B->seq_al[0]);
-           return B;
-       }
-void thread_seq_struc2aln ( Alignment *A, Sequence *ST)
-       {
-       int a, b, c,d;
-       int len, cons;
-       
-       for ( a=0; a< A->nseq; a++)
-               for ( b=0; b< ST->nseq; b++)
-                       {
-                       if ( strcmp ( A->name[a], ST->name[b])==0)
-                               {
-                               ungap (ST->seq[b]);
-                               len=strlen(A->seq_al[a]);
-                               for ( c=0, d=0; c<len; c++)
-                                       {
-                                       if ( !is_gap(A->seq_al[a][c]))A->seq_al[a][c]=ST->seq[b][d++];
-                                       }
-                               }
-                       }
-       cons=name_is_in_list ("Cons", ST->name, ST->nseq, 100);
-       if ( cons!=-1 && A->len_aln==strlen ( ST->seq[cons]))
-         {
-           sprintf (A->name[A->nseq], "Cons");
-           sprintf (A->seq_al[A->nseq],"%s", ST->seq[cons]);
-           A->nseq++;
-         }
-       }
-void cache_id ( Alignment *A)
-       {
-       int a, b,n;
-       char r1, r2, r3;
-       
-       for ( a=0; a< A->len_aln; a++)
-               {
-               for ( b=0, n=0; b< A->nseq; b++)if ( !is_gap(A->seq_al[b][a]))n++;
-               for ( b=0; b< A->nseq; b++)
-                       if ( !is_gap(A->seq_al[b][a]) && n==A->nseq)A->seq_al[b][a]='h';
-                       else if( !is_gap(A->seq_al[b][a]))A->seq_al[b][a]='x';
-               }
-       for ( a=0; a< A->nseq; a++)
-               {
-               for ( b=1; b< A->len_aln-1; b++)
-                       {
-                       r1=A->seq_al[a][b-1];
-                       r2=A->seq_al[a][b];
-                       r3=A->seq_al[a][b+1];
-                       if (r2=='h')
-                               {
-                               if ( (r1=='h' || r1=='b') && (r3=='h' || r3=='b'))A->seq_al[a][b]='h';
-                               else A->seq_al[a][b]='b';
-                               }
-                       }
-               for ( b=1; b< A->len_aln-1; b++)if ( A->seq_al[a][b]=='b')A->seq_al[a][b]='x';
-               }
-                       
-       }
-                       
-                                                                        
-/*******************************************************************************************/
-/*                                                                                         */
-/*                                                                                         */
-/*                               PROCESING OF EST                                          */
-/*                                                                                         */
-/***************************************************************************************** */
-int process_est_sequence ( Sequence *S, int *cluster_list)
-       {
-       char **inverted_seq;
-       int T=20;
-       int a, b;
-       int V1, V2;
-       int **sens;
-       int **a_sens;
-       int **best;
-       int *solution;
-       char buf [VERY_LONG_STRING];
-       int n_clusters=0;
-       int n;
-       
-       sens=declare_int ( S->nseq,S->nseq);
-       a_sens=declare_int ( S->nseq,S->nseq);
-       best=declare_int ( S->nseq,S->nseq);
-       
-       
-       inverted_seq=vcalloc ( S->nseq, sizeof (char*));
-       for ( a=0; a<S->nseq; a++)
-               inverted_seq[a]=invert_seq ( S->seq[a]);
-               
-       for ( a=0; a< S->nseq-1; a++)
-               {
-               
-               for ( b=a+1; b<S->nseq; b++)
-                                    {
-                                    
-                                    V1=sens[a][b]=sens[b][a]=get_best_match ( S->seq[a], S->seq[b]);
-                                    V2=a_sens[a][b]=a_sens[b][a]=get_best_match ( S->seq[a],inverted_seq[b]);
-                                    best[a][b]=best[b][a]=(V1>V2)?V1:V2;
-                                    }
-               }
-       solution=SHC ( S->nseq, a_sens, sens);
-       
-       
-       for ( a=0; a<S->nseq; a++)cluster_list[a]=-1;
-       for ( a=0; a<S->nseq; a++)
-               {
-               n=search_for_cluster (a, n_clusters, cluster_list, T, S->nseq, best);
-               if ( n>0)n_clusters++;
-               }
-       fprintf ( stderr, "\nTHERE %s %d Independant Cluster(s) in your sequences",(n_clusters>1)?"are":"is",(n_clusters));
-       for (a=0; a<n_clusters; a++)
-               {
-               fprintf (stderr, "\n");
-               for ( b=0; b<S->nseq; b++)
-                       {
-                       if ( cluster_list[b]==a)fprintf ( stderr, "%s ", S->name[b]);
-                       }
-               }
-               
-       for ( a=0; a<S->nseq; a++)
-               {
-               if ( solution[a]==-1)
-                       {
-                       S->seq[a]=inverted_seq[a];
-                       sprintf ( buf, "i_%s", S->name[a]);
-                       sprintf ( S->name[a], "%s", buf);
-                       }
-               }
-       return n_clusters;
-       }
-
-int search_for_cluster ( int seq, int cluster_number, int *cluster_list, int T, int nseq, int **S)     
-       {
-       int n=0,a;
-       
-       if (cluster_list[seq]==-1)
-               {
-               cluster_list[seq]=cluster_number;
-               n++;
-               }
-       for ( a=0; a<nseq; a++)
-               if ( cluster_list[a]==-1)
-                       {
-                       
-                       if (S[seq][a]>T)
-                               {
-                               n++;
-                               cluster_list[a]=cluster_number;
-                               n+=search_for_cluster ( a, cluster_number, cluster_list, T, nseq, S);
-                               }
-                       }
-       return n;
-       }       
-               
-int * SHC ( int nseq, int **NST, int **ST)
-       {
-       int a;
-       int mut;
-       int score, new_score;
-       int N_IT=VERY_LONG_STRING;
-       int *sol;
-       int count;
-       
-       sol=vcalloc ( nseq, sizeof (int));
-       for ( a=0; a<nseq; a++)
-               sol[a]=(addrand ((unsigned long)100)>49)?1:-1;
-               
-       score=evaluate_sol (sol, nseq, ST, NST);
-       fprintf ( stderr, "\nI_Score=%d\n", score);
-       N_IT=N_IT*nseq;
-       
-       for ( count=0,a=0; a< N_IT && score<VERY_LONG_STRING; a++, count++)
-               {
-               mut=mutate_sol ( sol,nseq);
-               new_score=evaluate_sol (sol, nseq, ST, NST);
-               if ( new_score>score)
-                       {
-                       score=new_score;
-                       }
-               else if ( (addrand ((unsigned long)VERY_LONG_STRING))>score)
-                       {
-                       score=new_score;
-                       }
-               else
-                       sol[mut]=sol[mut]*-1;
-               if ( count==VERY_LONG_STRING)
-                       {
-                       count=0;
-                       fprintf ( stderr, "\nScore=%d", score);
-                       }       
-               }
-       fprintf ( stderr, "\nScore=%d\n", score);
-       return sol;
-       }
-
-int mutate_sol (int *sol, int nseq)
-       {
-       int n;
-       n=addrand ((unsigned long)nseq);
-       sol[n]=sol[n]*-1;
-       return n;
-       }
-int evaluate_sol ( int *sol, int nseq, int **ST, int **NST)
-       {
-       static int max_score;
-       int a, b, score=0;
-       
-       if ( max_score==0)
-               {
-               for ( a=0; a<nseq-1; a++)
-                       for ( b=a+1; b<nseq; b++)
-                               {
-                               max_score+=(ST[a][b]>NST[a][b])?ST[a][b]:NST[a][b];
-                               }
-               }
-       
-       for ( a=0; a<nseq-1; a++)
-               for (b=a+1; b<nseq; b++)
-                       if ( (sol[a]*sol[b])<0)score+=NST[a][b];
-                       else score+=ST[a][b];
-       return (score*VERY_LONG_STRING)/max_score;
-       }               
-               
-     
-char * invert_seq ( char *seq)
-       {
-       int a, b;
-       
-       char *nseq;
-       int l;
-       
-       
-       l=strlen ( seq);
-       for ( a=0; a<l; a++)
-               seq[a]=tolower ( seq[a]);
-       nseq=vcalloc ( l+1, sizeof (char));
-       
-       for ( a=0, b=l-1; a<l; a++, b--)
-               {
-               if (seq[b]=='n')nseq[a]='n';
-               else if (seq[b]=='g')nseq[a]='c';
-               else if (seq[b]=='c')nseq[a]='g';
-               else if (seq[b]=='a')nseq[a]='t';
-               else if (seq[b]=='t')nseq[a]='a';
-               }
-               
-       nseq[l]='\0';
-       return nseq;
-       }
-               
-               
-int get_best_match ( char *seq1, char *seq2)
-       {
-       static int **m;
-       static int ml;
-       int a, b;
-       int **mdiag;
-       int n_mdiag=0;
-       int best;
-       int l1, l2;
-       
-       
-       l1=strlen ( seq1);
-       l2=strlen (seq2);
-       if ( m==NULL)
-               {
-               ml=(l1>l2)?l1:l2;
-               m=declare_int (ml, ml);
-               }
-       else if ( (ml<l1) || (ml<l2))
-               {
-               free_int (m, ml);
-               ml=(l1>l2)?l1:l2;
-               m=declare_int (ml, ml);
-               }
-               
-       for ( a=0; a<l1; a++)
-               {
-               for ( b=0; b<l2; b++)
-                       m[a][b]=((seq1[a]==seq2[b])|| seq1[a]=='n' ||seq2[b]=='n')?1:0;
-               }
-       mdiag= extract_m_diag_streches ( m, l1, l2,seq1, seq2, &n_mdiag); 
-       
-       for ( best=0,a=0; a<n_mdiag; a++)
-               best=(mdiag[a][0]>best)?mdiag[a][0]:best;
-       
-       return best;
-       }
-
-int** extract_m_diag_streches ( int ** m, int l1, int l2,char *seq1, char *seq2, int *n_mdiag)
-       {
-       
-       int b, x, y, s1, s2;
-       static int **mdiag;
-       int in;
-       static int max_diag=VERY_LONG_STRING;
-        
-        /*
-        diag[0]=len;
-        diag[1]=x_start;
-        diag[2]=y_start;
-        diag[3]=x_end;
-        diag[4]=y_end;
-        */
-        
-       if ( mdiag==NULL)
-               mdiag=declare_int ( max_diag, 5);
-       
-       for ( s1=l1-1, s2=0;s2<l2;)
-               {
-               for ( in=0,x=s1, y=s2; x<l1 && y<l2; x++, y++)
-                       { 
-                       if (m[x][y]>0)
-                               {
-                               if (in==1)
-                                       mdiag[n_mdiag[0]][0]++;
-                               else 
-                                       {
-                                       mdiag[n_mdiag[0]][0]=1;
-                                       mdiag[n_mdiag[0]][1]=x;
-                                       mdiag[n_mdiag[0]][2]=y;
-                                       in=1;
-                                       }
-                               }
-                       else
-                               if (in==1)
-                                       {
-                                       in=0;
-                                       mdiag[n_mdiag[0]][3]=x-1;
-                                       mdiag[n_mdiag[0]][4]=y-1;
-                                       if ( !is_strech ( "ta", seq1, seq2,mdiag[n_mdiag[0]][0], mdiag[n_mdiag[0]][1],mdiag[n_mdiag[0]][2]))n_mdiag[0]++;
-                                       }
-                       if (n_mdiag[0]==(max_diag-1))
-                               {mdiag=vrealloc (mdiag, (max_diag+VERY_LONG_STRING)*sizeof (int*));
-                               for ( b=max_diag; b<max_diag+VERY_LONG_STRING; b++)mdiag[b]=vcalloc ( 5, sizeof (int));
-                               max_diag+=VERY_LONG_STRING;
-                               }
-                       }
-               s2+= (s1==0)?1:0;       
-               s1-= (s1==0)?0:1;
-               if (in==1)
-                       {
-                       in=0;
-                       mdiag[n_mdiag[0]][3]=x-1;
-                       mdiag[n_mdiag[0]][4]=y-1;
-                       if ( !is_strech ( "ta", seq1, seq2,mdiag[n_mdiag[0]][0], mdiag[n_mdiag[0]][1],mdiag[n_mdiag[0]][2]))n_mdiag[0]++;
-                       }
-               }
-       
-       return mdiag;
-       }                               
-int is_strech ( char *AA, char *seq1, char *seq2, int len, int x, int y)
-       {
-       int n, i, j, c,a,nr;
-       int T=70;
-       
-       n=strlen ( AA);
-       for ( a=0; a<n; a++)
-               {
-               for (nr=0, i=x, j=y, c=0; c<len; c++, i++, j++)
-                       if ((seq1[i]==AA[a]) && (seq2[j]==AA[a]))nr++;
-               if ( ((nr*100)/len)>T)return 1;
-               }
-       return 0;
-       }
-       
-       
-/************************************************************************************/
-/*                                                                                  */
-/*                                      STRUC                                       */
-/*                                                                                  */
-/*                                                                                  */
-/************************************************************************************/
-
-char * oneletaa2threeletaa(char aa);
-float aa2property   (char aa, char *mode);
-
-int output_seq2struc(char *outfile, Alignment *A)
-{
-  FILE *fp1, *fp2;
-  int a,c, l;
-  float v, h, x, y, z, dx, dy, dz;
-  char *s;
-  char *tmpfile1, *tmpfile2;
-  char command[1000];
-
-  tmpfile1=vtmpnam(NULL);
-  tmpfile2=vtmpnam(NULL);
-  
-  ungap (A->seq_al[0]);
-  s=A->seq_al[0];l=strlen (s);
-  fp1=vfopen (tmpfile1, "w");
-
-  x=y=z=0;
-  for ( a=0; a< l; a++)
-    {
-      h=aa2property ( s[a], "doolittle"   );
-      v=aa2property (s[a], "volume");
-      /*14.398907: peptide bond length*/
-      dx=(float)sqrt ((double)(14.398907/(((h*h)/(v*v))+1)));
-      dy=dx*(h/v);
-      dz=0;
-
-       
-      x+=dx;
-      y+=dy;
-      z+=dz;
-      fprintf (fp1, "ATOM%7d   CA %s A%4d%12.3f%8.3f%8.3f  1.00   5.30\n",a+1, oneletaa2threeletaa(s[a]),a+1, x, y, z);
-    }   
-  vfclose (fp1);
-  sprintf ( command, "extract_from_pdb -infile %s -force > %s", tmpfile1,  tmpfile2);
-  my_system  (command);
-  fp1=vfopen (tmpfile2, "r");
-  fp2=vfopen (outfile, "w");
-  
-  while ( (c=fgetc(fp1))!=EOF)fprintf (fp2, "%c", c);
-  vfclose (fp1);
-  vfclose (fp2);
-  
-  return 0;
-}
-
-char * oneletaa2threeletaa(char aa)
-  {
-    aa=tolower (aa);
-    if ( aa=='a')return "ALA";
-    else if ( aa=='r') return "ARG";
-    else if ( aa=='n') return "ASN";
-    else if ( aa=='d') return "ASP";
-    else if ( aa=='c') return "CYS";
-    else if ( aa=='q') return "GLN";
-    else if ( aa=='e') return "GLU";
-    else if ( aa=='g') return "GLY";
-    else if ( aa=='h') return "HIS";
-    else if ( aa=='i') return "ILE";
-    else if ( aa=='l') return "LEU";
-    else if ( aa=='k') return "LYS";
-    else if ( aa=='m') return "MET";
-    else if ( aa=='f') return "PHE";
-    else if ( aa=='p') return "PRO";
-    else if ( aa=='s') return "SER";
-    else if ( aa=='t') return "THR";
-    else if ( aa=='w') return "TRP";
-    else if ( aa=='y') return "TYR";
-    else if ( aa=='v') return "VAL";
-    else 
-      {
-       fprintf ( stderr, "\nERROR: %c is not an amino acid [FATAL::aa2hydropathy::%s]", aa, PROGRAM);
-       myexit (EXIT_FAILURE);
-       return NULL;
-      }
-    return NULL;
-  } 
-  
-float aa2property   (char aa, char *mode)
-  {
-    if ( mode==NULL || strm (mode, "doolittle"))
-        {
-          aa=tolower (aa);
-          if ( aa=='i')return 4.5;
-          else if ( aa=='v') return 4.2;
-          else if ( aa=='l') return 3.8;
-          else if ( aa=='f') return 2.8;
-          else if ( aa=='c') return 2.5;
-          else if ( aa=='m') return 1.9;
-          else if ( aa=='a') return 1.8;
-          else if ( aa=='g') return -0.4;
-          else if ( aa=='t') return -0.7;
-          else if ( aa=='w') return -0.9;
-          else if ( aa=='s') return -0.8;
-          else if ( aa=='y') return -1.3;
-          else if ( aa=='p') return -1.6;
-          else if ( aa=='h') return -3.2;
-          else if ( aa=='e') return -3.5;
-          else if ( aa=='q') return -3.5;
-          else if ( aa=='d') return -3.5;
-          else if ( aa=='n') return -3.5;
-          else if ( aa=='k') return -3.9;
-          else if ( aa=='r') return -4.5;
-          else 
-            {
-              fprintf ( stderr, "\nERROR: %c is not an amino acid [FATAL::aa2hydropathy::%s]", aa, PROGRAM);
-              myexit (EXIT_FAILURE);
-            }
-        }
-    else if (strm (mode, "volume"))
-        {
-          aa=tolower (aa);
-          if ( aa=='a')return 0.915;
-          else if ( aa=='r') return 2.02;
-          else if ( aa=='n') return 1.35;
-          else if ( aa=='d') return 1.24;
-          else if ( aa=='c') return 1.18;
-          else if ( aa=='q') return 1.61;
-          else if ( aa=='e') return 1.55;
-          else if ( aa=='g') return 0.66;
-          else if ( aa=='h') return 1.67;
-          else if ( aa=='i') return 1.69;
-          else if ( aa=='l') return 1.68;
-          else if ( aa=='k') return 1.71;
-          else if ( aa=='m') return 1.70;
-          else if ( aa=='f') return 2.03;
-          else if ( aa=='p') return 1.29;
-          else if ( aa=='s') return 0.99;
-          else if ( aa=='t') return 1.22;
-          else if ( aa=='w') return 2.37;
-          else if ( aa=='y') return 2.03;
-          else if ( aa=='v') return 1.41;
-          else 
-            {
-              fprintf ( stderr, "\nERROR: %c is not an amino acid [FATAL::aa2hydropathy::%s]", aa, PROGRAM);
-              myexit (EXIT_FAILURE);
-            }
-        }
-    
-    else
-      {
-       fprintf ( stderr, "\nERROR: %s is an unknown mode [FATAL::aa2hydropathy::%s]", mode  , PROGRAM);
-       myexit (EXIT_FAILURE);
-      }
-  return 0;
-  } 
-          
-
-         
-          
-       
-/************************************************************************************/
-/*                                                                                  */
-/*                                      DNA                                         */
-/*                                                                                  */
-/*                                                                                  */
-/************************************************************************************/
-
-Alignment *code_dna_aln (Alignment *A)
-       {
-        int a, b,l,r;
-
-        for ( a=0; a< A->nseq; a++)
-          {
-            for (l=0, b=0; b< A->len_aln; b++)
-              {
-                r=A->seq_al[a][b];
-                if ( r=='-')l++;
-                else if ( r=='~')continue;
-                else if ( r=='.')l++;
-                else if ( !islower(r))A->seq_al[a][b]='4';
-                else
-                  {
-                    A->seq_al[a][b]=(l+3)%3+'0';
-                    l++;
-                  }
-              }
-          }
-        return A;
-       }
-
-  
-Alignment *back_translate_dna_aln (Alignment *A)
-       {
-        /*Given a set of aligned sequences
-          starts from left to right
-          1 aa->3 nuc
-          ambiguities are randomly resolved.
-          returns the corresponding amino acid alignment
-        */      
-         int a;
-         char *seq    ;
-        
-        ungap_aln(A);
-        A=realloc_aln (A, 10000);
-        seq=vcalloc ( 10000, sizeof (char));
-
-        
-        for ( a=0; a< A->nseq; a++)
-          {
-          seq=back_translate_dna_seq (A->seq_al[a], seq, RANDOM);
-          sprintf ( A->seq_al[a], "%s", seq);
-          }
-        A->len_aln=A->len_aln*3;
-        compress_aln (A);
-        vfree (seq);
-        return A;
-       }
-char * back_translate_dna_seq ( char *in_seq,char *out_seq, int mode)     
-       {
-        int a,len;
-
-        len=strlen(in_seq);
-        
-        if (out_seq==NULL)out_seq=vcalloc ( len*3+1, sizeof (char));
-        
-        out_seq[0]='\0';
-        for (a=0; a<len; a++)
-          {
-          strcat (out_seq,  back_translate_dna_codon (in_seq[a],mode));
-          }
-        
-        return out_seq;
-       }
-
-static Sequence *rna_seq2dna_seq (Sequence *S);
-static Sequence *dna_seq2rna_seq (Sequence *S);
-Sequence * transform_sequence ( Sequence *S, char *mode)
-{
-  if ( strm (mode, "rna2dna"))
-    return rna_seq2dna_seq (S);
-  else if ( strm (mode, "dna2rna"))
-    return dna_seq2rna_seq (S);
-  else 
-    printf_exit (EXIT_FAILURE, stderr, "Unknown -transform mode: %s [FATAL:%s]\n", mode,PROGRAM);
-  return NULL;}
-
-Sequence *rna_seq2dna_seq (Sequence *S)
-{
-  int a, b;
-  
-  if ( !strm(S->type, "DNA") && !strm (S->type, "RNA")) printf_exit (EXIT_FAILURE, stderr, "Sequences should be *RNA* type [FATAL:%s]\n", PROGRAM);
-  for ( a=0; a<S->nseq; a++)
-    {
-      for (b=0; b<strlen (S->seq[a]); b++)
-       {
-         if ( S->seq[a][b]=='u') S->seq[a][b]='t';
-         if ( S->seq[a][b]=='U') S->seq[a][b]='T';
-       }
-      HERE ("%s", S->seq[a]);
-    }
-  return S;
-}
-Sequence *dna_seq2rna_seq (Sequence *S)
-{
-  int a, b;
-  
-  if ( !strm(S->type, "DNA") && !strm (S->type, "RNA")) printf_exit (EXIT_FAILURE, stderr, "Sequences should be *DNA* type (type=%s) [FATAL:%s]\n", PROGRAM, S->type);
-  for ( a=0; a<S->nseq; a++)
-    for (b=0; b<S->len[a]; b++)
-      {
-       if ( S->seq[a][b]=='t') S->seq[a][b]='u';
-       if ( S->seq[a][b]=='T') S->seq[a][b]='U';
-      }
-  return S;
-}
-
-  
-
-int get_longest_frame (char *seq, int mode);
-Sequence  *translate_dna_seqS     (Sequence *S, int frame, int stop)
-{
-  //frame: 1->3
-  char *s;
-  int a, b,c,l;
-
-  for (a=0; a<S->nseq; a++)
-    {
-      s=S->seq[a];
-      ungap(s);
-      l=strlen (s);
-      for (b=(frame-1); b<l; b+=3)
-       {
-         s[b]=translate_dna_codon (s+b,stop);
-         for (c=b+1; c<b+3 && c<l; c++)s[c]='-';
-       }
-    }
-  return S;
-}
-Alignment *translate_dna_aln (Alignment *A, int frame)
-       {
-        /*Given a set of aligned sequences
-          starts from left to right
-          3 nuc->1 aa
-          2nuc+1gap, 1nuc+2gap->3 gaps
-          1 stop-> 3gaps
-          returns the corresponding amino acid alignment
-        */
-
-
-        int a, b,r;
-
-
-        if (frame==3 || frame ==4)
-          {
-            
-            for (a=0; a< A->nseq; a++)
-              {
-                char *d, *buf, f;
-                d=A->seq_al[a];
-                f=get_longest_frame (d,frame);
-                buf=vcalloc ( strlen (d)+1, sizeof (char));
-                if ( f<3)
-                  {
-                    sprintf (buf, "%s", d+f);
-                    sprintf (d, "%s", buf);
-                    sprintf (A->seq_comment[a], " frame: %d", f);
-                  }
-                else if ( f>=3)
-                  {
-                    f-=3;
-                    sprintf ( buf, "%s", d);
-                    buf=complement_string (buf);
-                    sprintf (d, "%s",buf+f);
-                    sprintf (A->seq_comment[a], " frame: %d Reverse Complement", f);
-                  }
-                vfree (buf);
-              }
-          }
-        else
-          {
-            
-            for ( a=0; a< A->nseq; a++)
-              for (b=0; b< frame; b++)
-                A->seq_al[a][b]='-';
-            ungap_aln(A);
-          }
-
-        for ( b=0; b< A->nseq; b++)
-          for ( a=0; a< A->len_aln;)
-            {
-              
-              r=translate_dna_codon (A->seq_al[b]+a, 'z');
-              if (is_gap(r))
-                {
-                  A->seq_al[b][a++]='-';
-                  A->seq_al[b][a++]='-';
-                  A->seq_al[b][a++]='-';
-                }
-              else if ( r=='x')
-                {
-                  A->seq_al[b][a++]='o';
-                  A->seq_al[b][a++]='-';
-                  A->seq_al[b][a++]='-';
-                }
-              else if ( r=='z')
-                {
-                  A->seq_al[b][a++]='x';
-                  A->seq_al[b][a++]='-';
-                  A->seq_al[b][a++]='-';
-                }
-              else
-                {
-                  A->seq_al[b][a++]=r;
-                  A->seq_al[b][a++]='-';
-                  A->seq_al[b][a++]='-';
-                }
-            }   
-        compress_aln (A);
-        
-        return A;
-       }
-
-
-int seq2tblastx_db (char *out,Sequence *S, int strand)
-{
-  //strand : same values as in ncbi blastall
-  //1: direct
-  //2:revers
-  //3: both
-  int a, b,d, l;
-  char *prot, *pprot;
-  int min_exon_len=5;
-  FILE *fp;
-  fp=vfopen (out, "w");
-  for (a=0; a<S->nseq; a++)
-    {
-      for (b=-3; b<=3; b++)
-       {
-         int f;
-         int dl;
-
-         dl=strlen (S->seq[a]);
-         if (b==0)continue; 
-         else if ( strand==1 && b<0)continue;//only direct strand
-         else if ( strand==2 && b>0)continue;//only reverse strand
-         else if (b<0)
-           {
-             S->seq[a]=complement_string (S->seq[a]);
-             f=b*-1;
-           }
-         else
-           f=b;
-         prot=translate_dna_seq (S->seq[a], f, 'X', NULL);
-         upper_string (prot);
-        
-         l=strlen (prot);
-         pprot=prot;
-         for (pprot=prot,d=0; d<=l; d++)
-           {
-             if (prot[d]=='\0')
-               {
-                 prot[d]='\0';
-                 if ( strlen (pprot)>min_exon_len)
-                   {
-                     int start, end;
-                     end=(d)*3+(f-1);
-                     start=(end-(strlen (pprot))*3)+1;
-                     fprintf (fp, ">%s__%c__%d__%d__%d\n%s\n", S->name[a],(b>0)?'d':'r',start,end,dl, pprot);
-                     pprot=prot+d+1;
-                   }
-               }
-           }
-         vfree (prot);
-         if (b<0) S->seq[a]=complement_string (S->seq[a]);
-       }
-    }
-  vfclose (fp);
-  return EXIT_SUCCESS;
-}
-
-int get_longest_frame (char *in_seq, int mode)
-{
-  char *prot, *seq;
-  int a;
-  int max_l=0, l;
-  int best_frame=0;
-  int nf;
-  
-  seq=vcalloc (strlen (in_seq)+1, sizeof (char));
-  prot=vcalloc (strlen (in_seq)+1, sizeof (char));
-  sprintf ( seq, "%s", in_seq);
-  
-  if ( mode == 3)nf=3;
-  else if ( mode == 4) nf=6;
-  
-  for (a=0; a<nf; a++)
-    {
-      int f;
-      if (a==3)seq=complement_string (seq);
-      f=(a>=3)?a-3:a;
-      prot=translate_dna_seq ( seq,f,'\0', prot);
-      l=strlen (prot);
-      if (l>=max_l){max_l=l;best_frame=a;}
-    }
-  vfree (seq);
-  vfree (prot);
-  return best_frame;
-}
-
-Alignment *clean_gdna_aln (Alignment *A)
-       {
-          int a, b, c, r1, r2,s, p, n, tn;
-          int *col;
-          static int **mat;
-          Alignment *T=NULL;
-          int **score;
-          char *buffer;
-          
-
-          /*Viterbi Parameters*/
-          int AL=0;        /*Allowed Transition*/
-          int F=-1000000; /*Forbiden Transition*/
-          int SPLICE_PENALTY=100;
-          int ORF1=0, ORF2=1, ORF3=2, NC=3;
-          
-          int state, pstate, best_e, best_pstate_p,best_state_p, best_pstate_v, best_state_v, v;
-          int nstate=4;
-          int **transitions;
-          int e;
-          int **v_tab_p;
-          int **v_tab;
-          int * is_dna;
-          
-          best_state_p=best_state_v=best_pstate_p=best_pstate_v=best_e=0;
-          buffer=vcalloc ( 100000, sizeof (char));
-          is_dna=vcalloc ( A->nseq, sizeof (int));
-          score=declare_int ( A->nseq+1, A->len_aln);
-
-
-          if ( !mat)mat=read_matrice("pam250mt");
-          T=copy_aln (A, T);
-          col=vcalloc ( A->nseq, sizeof (int));
-          
-          for (a=0; a<= A->len_aln; a++)
-              for ( b=0; b< A->nseq; b++){A->seq_al[b][a]=tolower(A->seq_al[b][a]); A->seq_al[b][a]=(A->seq_al[b][a]=='t')?'u':A->seq_al[b][a];}
-
-          for ( a=0; a< A->nseq; a++)
-              {
-                  sprintf ( buffer, "%s", A->seq_al[a]);
-                  ungap (buffer);
-                  is_dna[a]=strm ( get_string_type (buffer), "DNA");
-              }
-          
-
-           for (a=0; a< A->len_aln-2; a++)
-              {
-              for (b=0; b< A->nseq; b++)
-                      {
-                      if (is_dna[b])col[b]=translate_dna_codon (A->seq_al[b]+a, 'x');
-                      else col[b]=tolower ( A->seq_al[b][a]);   
-                      }
-
-              for (n=0,tn=0,b=0; b< A->nseq; b++)
-                  for ( c=b; c< A->nseq; c++   )
-                      {
-                          r1=col[b];
-                          r2=col[c];
-                          
-                          if (r1=='x' || r2=='x'){score[A->nseq][a]=F;break;}
-                          else if (r1=='-' && r2=='-');
-                          else if (r1=='-' || r2=='-');
-                          else 
-                              {
-                              
-                                  if ( is_dna[b] && is_dna[c])score[A->nseq][a]+= mat[r1-'A'][r2-'A'];
-                                  else score[A->nseq][a]+=mat[r1-'A'][r2-'A']* (A->nseq*A->nseq);
-                              }
-                          n+=( !is_gap(r1) && !is_gap(r2));
-                          score[A->nseq][a]=(((tn!=0)?score[A->nseq][a]/tn:0));
-                      }
-              
-              }
-
-          /*initialisation*/
-
-          transitions=declare_int ( nstate, nstate);
-          v_tab=declare_int ( A->len_aln+2, nstate       );
-          v_tab_p=declare_int ( A->len_aln+2, nstate       );
-
-          for (a=0; a<nstate;a++)
-              for (b=0; b<nstate;b++)
-                    {transitions[a][b]=F;}
-
-          transitions[ORF1][ORF2]=AL;
-          transitions[ORF2][ORF3]=AL;
-          transitions[ORF3][ORF1]=AL;     
-          
-          transitions[ORF3][NC]  =AL-SPLICE_PENALTY;
-          transitions[NC][ORF1]  =AL-SPLICE_PENALTY;
-
-
-          for ( s=0; s<A->nseq; s++)
-              {
-              for ( p=0; p<=A->len_aln; p++){for (state=0; state< nstate; state++)v_tab_p[p][state]=-1; }
-              for (p=1+2; p<= A->len_aln; p++)
-                  {
-
-                  for (state=0; state< nstate; state++)
-                      {
-                          
-                          if ( state==NC){e=-best_e;}
-                          else
-                             {
-                                 e=score[A->nseq][(p-1)-state];
-                                 if ( state==0)best_e=e;
-                                 else best_e=MAX(e, best_e);
-                             }
-
-                          for ( pstate=0; pstate<nstate; pstate++)
-                              {
-                                  v=e+transitions[pstate][state]+v_tab[p-1][pstate];
-                                  if (pstate==0 ||(v>best_pstate_v) )
-                                     {
-                                      best_pstate_v=v;
-                                      best_pstate_p=pstate;
-                                     }
-                              }
-                       
-                          v_tab[p][state]=best_pstate_v;
-                          v_tab_p[p][state]=best_pstate_p;
-                          if (state==0 ||best_pstate_v>best_state_v )
-                             {
-                              best_state_p=state; 
-                              best_state_v=best_pstate_v;
-                             }
-                      }
-
-                  }
-
-              
-       
-              for (p=0; p< A->len_aln; p++)T->seq_al[s][p]='.';
-              for (p=A->len_aln; p>0; p--)
-                  {
-                      
-                      if ( best_state_p==0)T->seq_al[s][p-1]=translate_dna_codon (A->seq_al[s]+(p-1), 'x');
-                      else if ( best_state_p==1 || best_state_p==2)T->seq_al[s][p-1]='-';
-                     
-                     
-                      
-                      best_state_p=v_tab_p[p][best_state_p];
-                      
-                  }
-              }
-          
-          
-
-          vfree (col);
-          return T;
-       }
-
-Alignment *clean_cdna_aln (Alignment *A)
-       {
-        /*Given an alignmnet of nucleotides
-          Returns the same alignmnent whith non coding nucleotides replaced with dots
-          
-          at each position, the emission probability is the sum of pair of the substitution of amino-acids
-        */
-        
-          int a, b, c,s, p;
-          static int **mat;
-          int   *emission;
-          float em1, em2;
-          char *buffer;
-          Alignment *B=NULL;
-
-
-          
-
-          /*Viterbi Parameters*/
-          int AL=0;        /*Allowed Transition*/
-          int F=-1000000; /*Forbiden Transition*/
-          int PENALTY=30;
-          int NC, C1,C2, C3, START, END;
-          int nstate=0;
-          int state=0,best_state=0, score=0, best_score=0;
-          int p_state;
-          int e=0;
-          int **score_tab;
-          int **state_tab;
-        
-          int **transitions;
-          int n;
-          int r1, r2, r3;
-
-          NC=nstate++;
-          C1=nstate++;
-          C2=nstate++;
-          C3=nstate++;
-          START=nstate++;
-          END=nstate++;
-
-          
-          B=copy_aln (A, B);
-          buffer=vcalloc ( 100000, sizeof (char));
-          emission=vcalloc (A->len_aln, sizeof (int));
-
-          if ( !mat)
-            {
-              mat=read_matrice("pam250mt");
-            }
-
-          /*Computation of the emission proba for the coding state*/
-
-
-          for (a=0; a< A->len_aln; a++)
-            {
-
-              /*First component: % occupancy of the column*/
-              em1=0;
-              for ( b=0; b< A->nseq; b++) em1+=!is_gap(translate_dna_codon (A->seq_al[b]+a, '-'));
-              em1=em1/(float)A->nseq;
-              
-              /*Second Component: % similarity within column*/
-              em2=0;
-              for (n=0,b=0; b< A->nseq-1; b++)
-                {
-                  r1=translate_dna_codon (A->seq_al[b]+a, '-');
-                  
-                  for (c=b+1; c<A->nseq; c++)
-                    {
-                      r2=translate_dna_codon (A->seq_al[c]+a, '-');
-                      if (is_gap(r2) || is_gap(r1));
-                      else
-                        {
-                          n++;
-                          em2+=((mat[r1-'A'][r2-'A'])>1)?1:0;
-                        }
-                    }
-                }
-              em2=em2/(float)((n==0)?1:n);
-              
-              
-              emission[a]=(em1*100);
-
-            }
-          
-        
-
-          /*initialisation*/
-
-          transitions=declare_int ( nstate, nstate);
-          score_tab=declare_int ( A->len_aln+2, nstate       );
-          state_tab=declare_int ( A->len_aln+2, nstate       );
-
-          for (a=0; a<nstate;a++)
-              for (b=0; b<nstate;b++)
-                    {transitions[a][b]=F;}
-
-          
-          transitions[START][C1]=AL;
-          transitions[START][NC]=AL;
-          transitions[C3][END]=AL;
-          transitions[NC][END]=AL;
-          transitions[C1 ][C2 ]=AL;
-          transitions[C2 ][C3 ]=AL;
-          transitions[C3 ][C1 ]=AL;
-          transitions[C3 ][NC ]=AL-PENALTY;
-          transitions[NC ][C1 ]=AL-PENALTY;
-          transitions[NC][NC]=AL-PENALTY;
-          
-          
-                  
-          for ( s=0; s< A->nseq; s++)
-            {
-            for ( p=0; p<=A->len_aln; p++){for (state=0; state< nstate; state++){score_tab[p][state]=F;state_tab[p][state]=-1;} }
-            score_tab[0][START]=0;
-            
-            for (p=1; p<= A->len_aln; p++)
-              {
-                for (state=0; state< nstate; state++)
-                  {
-                    if ( state==START || state==END)continue;
-                    else if      ( state==NC)  e=-10;
-                    else if ( state==C1)
-                      {
-                        e=emission[p-1];
-                      }
-                    else if ( state ==C2)
-                      {
-                        if ( p-2<0)e=F;
-                        else e=emission[p-2];
-                      }
-                    else if ( state==C3)
-                      {
-                        if ( p-3<0)e=F;
-                        else e=emission[p-3];
-                      }
-                    
-                    for (p_state=0; p_state<nstate; p_state++)
-                      {
-                        
-                        if (e==F)score=F;
-                        else 
-                          {
-                            score=(score_tab[p-1][p_state]==F)?F:(e+transitions[p_state][state]+score_tab[p-1][p_state]);
-                          }
-                        
-                        if(p_state==0 || score>best_score){ best_score=score;best_state=p_state;}
-                        
-                      }
-                    
-                    score_tab[p][state]=best_score;
-                    state_tab[p][state]=best_state;
-                    
-                  }
-              }
-            
-            best_score=best_state=UNDEFINED;
-            for (state=0; state<nstate; state++)
-              {
-                if (state==START || state==END)continue;
-                e=transitions[state][END];
-                if (e==F || score_tab[p-1][state]==F)continue;
-                
-                if (best_score==UNDEFINED || score_tab[p-1][state]>best_score)
-                  {
-                    best_score=score_tab[p-1][state]+e; 
-                    best_state=state;
-                  }
-                
-              }
-            
-            for (p=A->len_aln; p>0;)
-              {
-                B->seq_al[s][p-1]=best_state+'0';
-                best_state=state_tab[p][best_state];
-                p--;
-              }
-            }
-
-          for ( a=0; a< A->nseq; a++)
-            for ( b=0; b< A->len_aln;)
-              {
-                s=B->seq_al[a][b];
-                if ( s==C1+'0')
-                  {
-                    r1=A->seq_al[a][b];
-                    r2=A->seq_al[a][b+1];
-                    r3=A->seq_al[a][b+2];
-                    
-
-                    if ( is_gap(r1) ||is_gap(r2) ||  is_gap(r3))
-                      {
-                        A->seq_al[a][b]=(is_gap(r1))?'~':'.';
-                        A->seq_al[a][b+1]=(is_gap(r2))?'~':'.';
-                        A->seq_al[a][b+2]=(is_gap(r3))?'~':'.';
-                      }
-                    b+=3;
-                  }
-                else if ( s==NC+'0')
-                  {
-                    A->seq_al[a][b]=(is_gap(A->seq_al[a][b]))?'~':'.';
-                    b++;
-                  }
-                else 
-                  {
-                    fprintf (stderr, "\nPROBLEM: [%d %d]->%d", a, b, s-'0');
-                  }
-              }
-                
-
-          free_aln (B);
-          free_int (transitions, -1);
-          free_int (score_tab, -1);
-          free_int (state_tab, -1);
-          vfree (emission);
-          vfree (buffer);
-          
-          return A;
-       }
-
-
-
-
-Alignment *translate_splice_dna_aln (Alignment *A, Alignment *ST)
-       {
-          int a, b, c, r1, r2,s, p, n, tn;
-          int *col;
-          static int **mat;
-          Alignment *T=NULL;
-          int **score;
-          
-          /*Viterbi Parameters*/
-          int AL=0;        /*Allowed Transition*/
-          int F=-1000000; /*Forbiden Transition*/
-          int ORF1=0, ORF2=1, ORF3=2,SPL1=3, SPL2=4, SPL3=5, SPL4=6, NC=7;
-          int SPLICE_PENALTY;
-          int frame1, frame2, frame3, best_frame;
-          int nstate=8;
-          char r;
-          
-
-
-          int state=0, pstate=0, best_pstate_p=0,best_state_p=0, best_pstate_v=0, best_state_v=0, v=0;
-          
-          int **transitions;
-          int e=0;
-          int **v_tab_p;
-          int **v_tab;
-
-          score=declare_int ( A->nseq+1, A->len_aln);
-
-
-          if ( !mat)mat=read_matrice("pam250mt");
-          T=copy_aln (A, T);
-          col=vcalloc ( A->nseq, sizeof (int));
-          
-          for (a=0; a<= A->len_aln; a++)
-              for ( b=0; b< A->nseq; b++){A->seq_al[b][a]=tolower(A->seq_al[b][a]); A->seq_al[b][a]=(A->seq_al[b][a]=='t')?'u':A->seq_al[b][a];}
-
-          
-          
-
-          for (a=0; a< A->len_aln-2; a++)
-              {
-              for (b=0; b< A->nseq; b++)
-                      {
-                      col[b]=translate_dna_codon (A->seq_al[b]+a, 'x');
-                      }
-              
-              for (n=0,tn=0,b=0; b< A->nseq-1; b++)
-                  for ( c=b+1; c< A->nseq; c++, tn++   )
-                      {
-                          r1=col[b];
-                          r2=col[c];
-                          
-                          if (r1=='x' || r2=='x')score[A->nseq][a]=F;
-                          else if (r1=='-' && r2=='-');
-                          else if (r1=='-' || r2=='-');
-                          else 
-                              {
-                                  score[A->nseq][a]+= mat[r1-'A'][r2-'A'];
-                                  
-                              }
-                          n+=( !is_gap(r1) && !is_gap(r2));
-                      }   
-              score[A->nseq][a]=(((tn!=0)?score[A->nseq][a]/tn:0));
-                
-              }
-              
-          /*initialisation*/
-
-          transitions=declare_int ( nstate, nstate);
-          v_tab=declare_int ( A->len_aln+2, nstate*nstate);
-          v_tab_p=declare_int ( A->len_aln+2, nstate*nstate);
-
-          for (a=0; a<nstate;a++)
-            for (b=0; b<nstate;b++)
-              {transitions[a][b]=F;}
-
-          SPLICE_PENALTY=-1000;
-
-          transitions[ORF1][ORF2]    =AL;
-          transitions[ORF1][SPL1]    =AL-SPLICE_PENALTY;
-          
-          transitions[ORF2][ORF3]    =AL;
-          transitions[ORF2][SPL1]    =AL-SPLICE_PENALTY;
-          
-          transitions[ORF3][ORF1]    =AL;
-          transitions[ORF3][SPL1]    =AL-SPLICE_PENALTY;
-          
-          transitions[ORF3][ORF1]    =AL;
-          transitions[ORF3][SPL1]    =AL-SPLICE_PENALTY;
-          
-          transitions[ORF3][NC]=AL-100;
-          transitions[NC][ORF1]=AL-100;
-
-
-          transitions[SPL1][SPL2]=AL;
-          transitions[SPL2][NC  ]=AL-SPLICE_PENALTY;
-          transitions[NC  ][NC  ]=AL;
-          transitions[NC  ][SPL3]=AL-SPLICE_PENALTY;
-          transitions[SPL3][SPL4]=AL;
-          transitions[SPL4][ORF1]=AL;
-          transitions[SPL4][ORF2]=AL;
-          transitions[SPL4][ORF3]=AL;
-          
-
-          for ( s=0; s<A->nseq; s++)
-              {
-              for ( p=0; p<=A->len_aln; p++){for (state=0; state< nstate; state++)v_tab_p[p][state]=-1; }
-              for (p=1+2; p<= A->len_aln; p++)
-                  {
-                   frame1=score[A->nseq][(p-1)];
-                   frame2=score[A->nseq][(p-1)-1];
-                   frame3=score[A->nseq][(p-1)-2];  
-                   best_frame=best_int (3, 1, &a, frame1, frame2, frame3);
-                   for (state=0; state< nstate; state++)
-                      {
-                        r=tolower (A->seq_al[s][p-1]);
-                        r=(r=='u')?'t':r;
-                        
-                        if      (state==ORF1)e=frame1;
-                        else if (state==ORF2)e=frame2;
-                        else if (state==ORF3)e=frame3;
-                        else if (state==SPL1)e=(r=='g')?best_frame:F;
-                        else if (state==SPL2)e=(r=='t')?best_frame:F;
-                        else if (state==SPL3)e=(r=='a')?best_frame:F;
-                        else if (state==SPL4)e=(r=='g')?best_frame:F;
-                        else if (state==NC)e=-best_frame;
-                        for ( pstate=0; pstate<nstate; pstate++)
-                              {
-                                  v=e+transitions[pstate][state]+v_tab[p-1][pstate];
-                                  if (pstate==0 ||(v>best_pstate_v) ){best_pstate_v=v;best_pstate_p=pstate;}
-                              }
-                       
-                          v_tab[p][state]=best_pstate_v;
-                          v_tab_p[p][state]=best_pstate_p;
-                          if (state==0 ||best_pstate_v>best_state_v ){best_state_p=state; best_state_v=best_pstate_v;}
-                      }
-                  }
-
-              
-       
-              for (p=0; p< A->len_aln; p++)T->seq_al[s][p]='.';
-              for (p=A->len_aln; p>0; p--)
-                  {
-                      if ( best_state_p==0)T->seq_al[s][p-1]=toupper(translate_dna_codon (A->seq_al[s]+(p-1), 'x'));
-                      else if ( best_state_p>=SPL1  && best_state_p<=SPL4)T->seq_al[s][p-1]='-';
-                      best_state_p=v_tab_p[p][best_state_p];
-                  }
-              }
-          
-          
-
-          vfree (col);
-          return T;
-       }
-
-Alignment * mutate_cdna_aln ( Alignment *A)
-{
-    int a, b, c, n;
-    int n1, n2, r1, r2;
-    int **pos, ps;
-    int neutral_substitution=50;
-    int random_substitution=0;
-    int random_deletion=0;
-    int amino_acid_deletion=0;
-    int amino_acid_substitution=0;
-    char nuc_list[]="agct";
-    char *new_codon;
-
-    neutral_substitution=atoi(get_env_variable ("NEUTRAL_SUBSTITUTION",IS_FATAL));
-    random_substitution =atoi(get_env_variable ("RANDOM_SUBSTITUTION", IS_FATAL));
-    random_deletion     =atoi(get_env_variable ("RANDOM_DELETION", IS_FATAL));
-    amino_acid_deletion =atoi(get_env_variable ("AMINO_ACID_DELETION", IS_FATAL));
-    amino_acid_substitution =atoi(get_env_variable ("AMINO_ACID_SUBSTITUTION", IS_FATAL));
-    
-    
-    if (A->S)free_sequence ( A->S, (A->S)->nseq);
-    A->S=aln2seq(A);
-
-    addrandinit(time (NULL));
-
-    
-    pos=aln2pos_simple ( A, A->nseq);
-    
-    /* 1 Apply neutral substitutions    */
-    
-    if ( neutral_substitution)
-        {
-       for (  c=0; c< neutral_substitution; c++)
-           {
-           for (  a=0; a< A->nseq; a++)
-                {
-                   
-                   for ( b=0; b< A->len_aln; b++)
-                       {
-                       
-                       if (pos[a][b]<=0)continue; 
-                       ps=MAX(0,pos[a][b]-(pos[a][b]-1)%3-1);
-
-
-                       n1=(A->S)->seq[a][pos[a][b]-1];
-                       r1=translate_dna_codon ( (A->S)->seq[a]+ps, 'o');
-                       
-                       n2=nuc_list[(int)addrand((unsigned long) 4)];
-                       (A->S)->seq[a][pos[a][b]-1]=n2;
-                       r2=translate_dna_codon ( (A->S)->seq[a]+ps, 'o');
-                       
-                       
-                       if ( r1==r2 && r1!='o')A->seq_al[a][b]=n2;
-                       
-                       else (A->S)->seq[a][pos[a][b]-1]=n1;
-                       }
-               }
-           }
-       }
-
-    /* 2 Apply         substitutions    */
-     if ( random_substitution)
-        {
-       for (  a=0; a< A->nseq; a++)
-            {
-               for ( b=0; b< A->len_aln; b++)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   if (addrand ((unsigned long) 100)>random_substitution)continue; 
-                   
-                   n1=nuc_list[(int)addrand((unsigned long)4)];
-                   (A->S)->seq[a][pos[a][b]-1]=n1;
-                   A->seq_al[a][b]=n1;
-                   }
-           }
-       }
-    
-    /* 3 Apply amino acid substitutions */
-      if ( amino_acid_substitution)
-        {
-       for (  a=0; a< A->nseq; a++)
-            {
-               for ( b=0; b< A->len_aln; b+=3)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   if (addrand ((unsigned long) 100)>amino_acid_substitution)continue; 
-                   ps=MAX(0,pos[a][b]-(pos[a][b]-1)%3-1);
-                   
-                   r1=translate_dna_codon ( (A->S)->seq[a]+ps, 'o');
-                   new_codon=mutate_amino_acid(r1, "clustalw_col");
-                   
-                   for ( c=ps; c<ps+3; c++)(A->S)->seq[a][c]=new_codon[c-ps];
-                   }
-               for ( b=0; b< A->len_aln; b++)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   else A->seq_al[a][b]=(A->S)->seq[a][pos[a][b]-1];
-                   }
-           }
-       }  
-    /* 3 Apply amino acid deletions     */
-     if ( amino_acid_deletion)
-        {
-       for (  a=0; a< A->nseq; a++)
-            {
-               for ( b=0; b< A->len_aln; b+=3)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   if (addrand ((unsigned long) 1000)>amino_acid_deletion)continue; 
-                   ps=MAX(0,pos[a][b]-(pos[a][b]-1)%3-1);
-                   n=addrand ((unsigned long) 4)+1;
-                   
-                   for ( c=ps; c<ps+(3*n) && c<A->len_aln; c++)(A->S)->seq[a][c]='-';
-                   }
-               for ( b=0; b< A->len_aln; b++)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   else A->seq_al[a][b]=(A->S)->seq[a][pos[a][b]-1];
-                   }
-           }
-       }
-    /* 4 Apply amino acid insertions    */
-
-/*FRAMESHIFT MUTATIONS*/
-    /* 5 Apply nucleotide deletions*/
-     if ( random_deletion)
-        {
-       for (  a=0; a< A->nseq; a++)
-            {
-               for ( b=0; b< A->len_aln; b++)
-                   {
-                   if (pos[a][b]<=0)continue; 
-                   if (addrand ((unsigned long) 1000)>random_deletion)continue; 
-                   
-                   n1='-';
-                   (A->S)->seq[a][pos[a][b]-1]=n1;
-                   A->seq_al[a][b]=n1;
-                   }
-           }
-       }
-    /* 6 Apply nucleotide deletions*/
-     free_int (pos, -1);
-   return A;
-
-}    
-    
-Alignment* clean_est  ( Alignment *A)
-        {
-         /*Rules are as follow:
-           Internal Gap > 30% Requences ----> -
-           Best Residue < 50% Residues  ----> 'N'
-         */
-         int a, b,c;
-         int best;
-         int tot;
-
-         for ( a=0; a< A->len_aln; a++)
-           {
-             
-             for (tot=0, b=0; b<4; b++)tot+=(A->P)->count[b][a];
-             best=best_int (5,1, &c, (A->P)->count[0][a],(A->P)->count[1][a],(A->P)->count[2][a],(A->P)->count[3][a],(A->P)->count[4][a]);
-             
-             if ( tot==0)
-               {
-                 fprintf ( stderr, "\nWARNING: POSITION WITH NO INFORMATION [clean_est:%s]", PROGRAM);
-                 A->seq_al[0][a]='-';
-               }
-             else if (((A->P)->count[4][a]*100)/tot >30)A->seq_al[0][a]='-';
-             else if ( (best*100)/tot<50)A->seq_al[0][a]='n';
-             
-           }
-       return A;
-       }
-          
-    
-
-char **make_symbols ( char *name, int *n)
-    {
-    char **symbol;
-
-    symbol=declare_char ( STRING, STRING);
-    
-    if ( strcmp (name, "3d_ali")==0)
-        {
-       sprintf ( symbol[0], "gih");
-       sprintf ( symbol[1], "eb");
-       sprintf ( symbol[2], "x");
-       sprintf ( symbol[3], "#l");
-       n[0]=4;
-       }
-    
-    else if ( strcmp (name, "all")==0)
-        {
-         int a, i;
-         for ( i=0,a=0; a<26; a++)
-           {
-             sprintf ( symbol[i++], "%c%c", 'a'+a, 'a'+a);
-             sprintf ( symbol[i++], "%c%c", 'A'+a, 'A'+a);
-           }
-         sprintf ( symbol[i++], "--");
-         n[0]=i;
-       }
-    
-    else if ( strcmp (name, "set1")==0)
-        {
-       sprintf ( symbol[0], "ilvmfywhktcagH");
-       sprintf ( symbol[1], "reqdnsP");
-       sprintf ( symbol[2], "--");
-       sprintf ( symbol[3], "#l");
-       n[0]=4;
-       }
-    else if ( strcmp (name, "set2")==0)
-        {
-       n[0]=0;
-       sprintf ( symbol[n[0]++], "gsacT");
-       sprintf ( symbol[n[0]++], "ndtvpS");
-       sprintf ( symbol[n[0]++], "ilkreqL");
-       sprintf ( symbol[n[0]++], "--");
-       sprintf ( symbol[n[0]++],"#l"); 
-       }
-    else if ( strcmp ( name, "any")==0)
-        {
-       sprintf ( symbol[0], "*x");
-       n[0]=1;
-               }
-
-
-
-
-    return symbol;
-    }
-
-char *testdna2gene (char *dna)
-{
-  int *w,a,l;
-  l=strlen (dna);
-  HERE ("%s", dna);
-  w=vcalloc(l+1, sizeof (int));
-  for (a=0; a<l; a++)
-    {
-      w[a]=isupper (dna[a])?1:-1;
-    }
-  dna=dna2gene (dna,w);
-  vfree (w);
-  return dna;
-}
-
-Sequence *dnaseq2geneseq (Sequence *S, int **w)
-{
-  Sequence *PS;
-  int a;
-  char *p;
-
-  PS=duplicate_sequence (S);
-  for (a=0; a<S->nseq; a++)
-    {
-      p=dna2gene (S->seq[a], w[a]);
-      if (strstr (p, "F"))
-       {
-         HERE ("----FRAMESHIFT: %s", S->name[a]);
-       }
-      vfree (PS->seq[a]);
-      PS->len[a]=strlen(p);
-      PS->seq[a]=vcalloc (PS->len[a]+1, sizeof (char));
-      sprintf ( PS->seq[a], "%s", p);
-      vfree (p);
-    }
-  PS=reset_sequence_len (PS);
-  return PS;
-}
-
-char *dna2gene (char *dna, int *w)
-{
-  int a, b, c, ns,l,od;
-  int I1, I2, I3, START, NCE, NCS;
-  int C1, S1_1, S2_1, S3_1, S4_1,NC1;
-  int C2, S1_2, S2_2, S3_2, S4_2,NC2;
-  int C3, S1_3, S2_3, S3_3, S4_3,NC3;
-  int ST;
-  int st;
-  
-  double p_C1, p_C2;
-  double **C1_mat, **C2_mat;
-  double *tb, **sc_mat, **tb_mat;
-  double **em, **trans;
-  double avg_w=0;
-  
-  char **string;
-  double forbiden   =-100000;
-  double frameshift1;
-  double frameshift2;
-  double exon_penalty;
-  double exon_reward;
-  double nostop_penalty;
-  double shiftw;
-  int frameshift_symbol='F';
-  char *out_dna;
-  int max=0;
-
-  char *three_dna;
-
-  three_dna=translate_dna_seq_on3frame (dna, 'x', NULL);
-  lower_string(three_dna);
-  l=strlen (dna);
-  for (a=0; a<l; a++){max=MAX(max,w[a]);avg_w+=(double)w[a];}
-  avg_w/=(double)l;
-  shiftw=avg_w*-2;
-  
-  exon_penalty=-100*avg_w;
-  exon_reward=avg_w;
-  nostop_penalty=-100 *avg_w;
-  frameshift1=forbiden;
-  frameshift2=frameshift1;
-  
-  out_dna=vcalloc ( 2*strlen (dna)+1, sizeof (char));
-  sprintf (out_dna, "%s", dna);
-  ns=0;
-  START=ns++;  I1=ns++;I2=ns++;I3=ns++;NCE=ns++;NCS=ns++;
-  
-  C1=ns++; S1_1=ns++;S2_1=ns++;NC1=ns++;S3_1=ns++;S4_1=ns++;
-  C2=ns++; S1_2=ns++;S2_2=ns++;NC2=ns++;S3_2=ns++;S4_2=ns++;
-  C3=ns++; S1_3=ns++;S2_3=ns++;NC3=ns++;S3_3=ns++;S4_3=ns++;
-  ST=ns++;
-  
-  string=declare_char ( ns+1, 10);
-  sprintf (string [S1_1], "S1_1");
-  sprintf (string [S2_1], "S2_1");
-  sprintf (string [S3_1], "S3_1");  
-  sprintf (string [S4_1], "S4_1");
-  sprintf (string [S1_2], "S1_2");
-  sprintf (string [S2_2], "S2_2");
-  sprintf (string [S3_2], "S3_2");  
-  sprintf (string [S4_2], "S4_2");
-  
-  sprintf (string [S1_3], "S1_3");
-  sprintf (string [S2_3], "S2_3");
-  sprintf (string [S3_3], "S3_3");  
-  sprintf (string [S4_3], "S4_3");
-  
-  sprintf (string [START], "START");
-  sprintf (string [NCE], "NCE");
-  sprintf (string [NCS], "NCS");
-  sprintf (string [NC1], "NC1");
-  sprintf (string [NC2], "NC2");
-  sprintf (string [NC3], "NC3");
-  sprintf (string [I1], "I1");
-  sprintf (string [I2], "I2");
-  sprintf (string [I3], "I3");
-  sprintf (string [C1], "C1");
-  sprintf (string [C2], "C2");
-  sprintf (string [C3], "C3");
-  
-  sprintf (string [ST], "STOP");
-
-  trans=declare_double(ns,ns);
-  em=declare_double   (ns,256);
-  tb=vcalloc ( l+1, sizeof (double));
-  sc_mat=declare_double (l+1, ns);
-  tb_mat=declare_double (l+1, ns);
-  C1_mat=declare_double (l+1, ns);
-  C2_mat=declare_double (l+1, ns);
-  
-  for (a=0; a<ns; a++)
-    {
-      for (b=0; b<ns; b++)trans[a][b]=forbiden;
-      for (b=0; b<256; b++)em[a][b]=forbiden;
-    }
-  trans[START][I1]=0;
-  trans[START][NCS]=0;
-  trans[NCS][NCS]=0;
-  trans[NCS][NCE]=0;//allow sequence entirely non coding
-  
-  trans[NCS][I1]=0;
-  trans[I1][I2]=0;
-  trans[I2][I3]=0;
-  trans[I3][C1]=0;
-  
-  trans[C1][C2]=0;
-  trans[C1][C3]=frameshift1;
-  trans[C1][C1]=frameshift2;
-  
-  trans[C2][C3]=0;
-  trans[C2][C1]=frameshift1;
-  trans[C2][C2]=frameshift2;
-  
-  trans[C3][C1]=exon_reward;
-  trans[C3][C2]=frameshift1;
-  trans[C3][C3]=frameshift2;
-  
-  trans[C3][NCE]=nostop_penalty;
-  trans[C3][ST] =0; //normal termination
-  trans[ST][NCE]=0;
-  trans[NCE][NCE]=0;
-  
-  trans[C1][S1_1]=exon_penalty;
-  trans[S1_1][S2_1]=0;
-  trans[S2_1][NC1]=0;
-  trans[NC1][NC1]=0;
-  trans[NC1][S3_1]=0;
-  trans[S3_1][S4_1]=0;
-  trans[S4_1][C2]=0;
-  trans[S4_1][C3]=frameshift1;
-  trans[S4_1][C1]=frameshift2;
-  
-
-  trans[C2][S1_2]=exon_penalty;
-  trans[S1_2][S2_2]=0;
-  trans[S2_2][NC2]=0;
-  trans[NC2][NC2]=0;
-  trans[NC2][S3_2]=0;
-  trans[S3_2][S4_2]=0;
-  trans[S4_2][C3]=0;
-  trans[S4_2][C1]=frameshift1;
-  trans[S4_2][C2]=frameshift2;
-  
-  trans[C3][S1_3]=exon_penalty;
-  trans[S1_3][S2_3]=0;
-  trans[S2_3][NC3]=0;
-  trans[NC3][NC3]=0;
-  trans[NC3][S3_3]=0;
-  trans[S3_3][S4_3]=0;
-  trans[S4_3][C1]=0;
-  trans[S4_3][C2]=frameshift1;
-  trans[S4_3][C3]=frameshift2;
-  
-  em[I1]['A']=1;
-  em[I2]['T']=1;
-  em[I3]['G']=1;
-
-  em[S1_1]['G']=1;
-  em[S2_1]['T']=1;
-  em[S3_1]['A']=1;
-  em[S4_1]['G']=1;
-
-  em[S1_2]['G']=1;
-  em[S2_2]['T']=1;
-  em[S3_2]['A']=1;
-  em[S4_2]['G']=1;
-
-  em[S1_3]['G']=1;
-  em[S2_3]['T']=1;
-  em[S3_3]['A']=1;
-  em[S4_3]['G']=1;
-
-  for (a=0; a<ns; a++)sc_mat[0][a]=tb_mat[0][a]=forbiden;
-  sc_mat[0][START]=tb_mat[0][START]=0;
-  
-  for (a=1; a<=l ;a++)
-    {
-      int r;
-      r=toupper (dna[a-1]);
-      for (b=0; b<ns; b++)
-       {
-         double best_sc,e,lw;
-         int best_t;
-         
-         lw=(double)w[a-1]+shiftw;
-
-         if (b==ST && three_dna[a-1]=='x')e=0;
-         else if (b==C1 || b == C2 || b== C3)e=lw;
-         else if ( b==NC1|| b==NC2 || b==NC3 || b==NCE || b==NCS)e=-lw;
-         else e=em[b][r];
-         
-         if (e==forbiden)
-         {
-               sc_mat[a][b]=forbiden;
-               tb_mat[a][b]=0;
-         }
-         else
-            {
-              for (best_sc=forbiden,best_t=0,c=0; c<ns; c++)
-                {
-                  double tr, sc, p_sc;
-                  tr  = trans[c][b];
-                  p_sc=sc_mat[a-1][c];
-
-                  //Frameshift handling
-                  
-                  if ( tr== forbiden || p_sc==forbiden);
-                  else if (tr!=forbiden)
-                    {
-                      if     (b==C2 && c!=C1 && c!=S4_1){p_C1='N'; p_C2=r;  }
-                      else if(b==C3 && c!=C2 && c!=S4_2){p_C1='N'; p_C2='N';}
-                      else
-                        {
-                          p_C1=C1_mat[a-1][c];
-                          p_C2=C2_mat[a-1][c];
-                        }
-                      
-                      if (b==C3 && is_stop (p_C1, p_C2,r)){tr=forbiden;}
-                      else
-                        {
-                          sc=tr+e+p_sc;
-                          if (c==0 || sc>best_sc)
-                            {
-                              best_sc=sc;
-                              best_t =c;
-                            }
-                        }
-                    }
-                }
-         
-              C1_mat[a][b]=(b==C1)?r:C1_mat[a-1][best_t];
-              C2_mat[a][b]=(b==C2)?r:C2_mat[a-1][best_t];
-              sc_mat[a][b]=best_sc;
-              tb_mat [a][b]=best_t;
-            }
-        
-       }
-    }
-  
-  a=l;
-  b=NCE;
-  c=sc_mat[a][NCE];
-  
-  while (a>0)
-    {
-//      HERE ("**%d [%s] %c in %d", b,string[b], dna[a-1], a);
-      tb[a]=b;
-      b=tb_mat[a][b];
-      a--;
-    }
-
-  od=0;
-  st=0;
-  for (a=0;a<l;a++)
-    {
-      int r,t,pt, coding;
-      t =tb[a+1];
-      pt=tb[a ];
-      r=dna[a];
-      if ( st || t==ST)st++;
-      coding=(t==C1 || t==C2 || t==C3 || t==I1 || t==I2 || t==I3 ||(st && st<=3))?1:0;
-
-      
-      
-      if      (t==C1 && (pt==C2 || pt==S4_2)){out_dna[od++]=frameshift_symbol;}
-      else if (t==C1 && (pt==C1 || pt==S4_1)){out_dna[od++]=frameshift_symbol;out_dna[od++]=frameshift_symbol;}
-     
-      else if (t==C2 && (pt==C3 || pt==S4_3)){out_dna[od++]=frameshift_symbol;}
-      else if (t==C2 && (pt==C2 || pt==S4_2)){out_dna[od++]=frameshift_symbol;out_dna[od++]=frameshift_symbol;}
-      
-      else if (t==C3 && (pt==C1 || pt==S4_1)){out_dna[od++]=frameshift_symbol;}
-      else if (t==C3 && (pt==C3 || pt==S4_3)){out_dna[od++]=frameshift_symbol;out_dna[od++]=frameshift_symbol;}
-      
-      if (coding)out_dna[od++]=toupper (r);
-      else out_dna[od++]=tolower(r);
-      
-    }
-
-  free_double (tb_mat, -1);
-  free_double (sc_mat, -1);
-  free_double (trans, -1);
-  free_double (em, -1);
-  free_double (C1_mat, -1);
-  free_double (C2_mat, -1);
-  vfree (tb);
-  vfree (three_dna);
-  return out_dna;
-}   
-
-   
-int res_weights2avg(Sequence *R, int **w)
-{
-  int a, b;
-  double avg=0;
-  int n=0;
-  
-  for (a=0; a<R->nseq; a++)
-    for (b=0; b<R->len[a]; b++){avg+=w[a][b];n++;}
-  return avg/n;
-}
-int res_weights2min(Sequence *R, int **w)
-{
-  int a,b;
-  int min=w[0][0];
-  
-  for (a=0; a<R->nseq; a++)
-    for (b=0; b<R->len[a]; b++)min=MIN(min,(w[a][b]));
-  return min;
-}
-int res_weights2max(Sequence *R, int **w)
-{
-  int a, b;
-  int max=w[0][0];
-  
-  for (a=0; a<R->nseq; a++)
-    for (b=0; b<R->len[a]; b++)max=MAX(max,(w[a][b]));
-  return max;
-}
-int scan_res_weights4ac (Sequence *R, int **w, int start, int end, int step)
-{
-  int best_t, a;
-  float best_ac=0;
-  float *count;
-  float *acc;
-  int avg;
-
-  avg=res_weights2avg(R,w);
-  best_t=start;
-  for (a=start; a<=end; a+=step)
-    {
-     
-      count=res_weights2accuracy_counts (R,w,a,NULL);
-      acc=counts2accuracy (count);
-      
-      if (acc[3]>best_ac)
-       {
-         best_ac=acc[3];
-         best_t=a;
-       }
-      vfree (count);vfree (acc);
-    }
-  count=res_weights2accuracy_counts (R,w,best_t,NULL);
-  acc=counts2accuracy (count);
-  fprintf (stderr, "\nBest_T: %d ", best_t);
-  display_accuracy (count,stderr);
-  
-  count=res_weights2accuracy_counts (R,w,2*avg,NULL);
-  acc=counts2accuracy (count);
-  fprintf (stderr, " Avg_T: %d ", 2*avg);
-  display_accuracy (count,stderr);
-  
-  vfree (acc); vfree (count);
-  return best_t;
-}
-int ** shift_res_weights ( Sequence *R, int **w, int shift)
-{
-  int a, b;
-  for (a=0; a<R->nseq; a++)
-    for (b=0; b<R->len[a]; b++)
-      w[a][b]+=shift;
-  return w;
-}
-float *res_weights2accuracy_counts ( Sequence *R, int **w,int T, float *result)
-{
-  int a, b, coding,pcoding;
-  
-  if (!result)result=vcalloc (4, sizeof (float));
-  
-  for (a=0; a<R->nseq; a++)
-    {
-      for (b=0; b<R->len[a]; b++)
-       {
-         coding=(isupper(R->seq[a][b]))?1:0;
-         pcoding=(w[a][b]>T)?1:0;
-         if      (  coding &&  pcoding)result[0]++;//TP
-         else if ( !coding && !pcoding)result[1]++;//TN
-         else if ( !coding &&  pcoding)result[2]++;//FP
-         else if (  coding && !pcoding)result[3]++;//FN
-       }
-    }
-  return result;
-}
-
-void genepred_seq2accuracy_counts4all (Sequence *R, Sequence *T)
-{
-  int a,b;
-  float *result =vcalloc (4, sizeof (float));
-
-  fprintf ( stderr, "\n");
-
-  for (a=0; a<R->nseq; a++)
-  {
-    fprintf ( stderr, "gene: %s ", R->name[a]);
-    for (b=0; b<T->nseq; b++)
-    {
-      if ( strm (R->name[a], T->name[b]) && hasupper(R->seq[a]))
-      {
-       vfree (display_accuracy (genepred2accuracy_counts (R->seq[a], T->seq[b], NULL),stderr));
-       break;
-      }
-    }
-  }
-  vfree(result);
-}
-      
-float* genepred_seq2accuracy_counts (Sequence *R, Sequence *T,float *result)
-{
-  int a,b;
-  
-  if (!result)result=vcalloc (4, sizeof (float));
-
-  for (a=0; a<R->nseq; a++)
-    for (b=0; b<T->nseq; b++)
-      if ( strm (R->name[a], T->name[b]) && hasupper(R->seq[a]))
-       genepred2accuracy_counts (R->seq[a], T->seq[b], result);
-  return result;
-}
-
-float* genepred2accuracy_counts      (char *ref,  char *target , float *result)
-{
-  char *ref2, *target2;
-  int l,a;
-  if ( !result) result=vcalloc (4, sizeof (float));
-  ref2=vcalloc ( strlen (ref)+1, sizeof (char));
-  sprintf ( ref2, "%s", ref);
-  
-  target2=vcalloc ( strlen (target)+1, sizeof (char));
-  sprintf ( target2, "%s", target);
-  
-  remove_charset (ref2, "Ff");
-  remove_charset (target2, "Ff");
-
-  if ( strlen (target2) != strlen (ref2))
-    {fprintf (stderr, "ERROR: Gene and target have different length [FATAL]\n"); myexit (EXIT_FAILURE);}
-  
-  l=strlen (ref2);
-  for (a=0; a<l; a++)
-    {
-      int coding, pcoding;
-      coding =isupper (ref2[a]);
-      pcoding=isupper (target2[a]);
-      if      ( coding  &&  pcoding)result[0]++;//TP
-      else if ( !coding && !pcoding)result[1]++;//TN
-      else if ( !coding &&  pcoding)result[2]++;//FP
-      else if (  coding && !pcoding)result[3]++;//FN
-    }
-  
-  vfree (ref2);
-  vfree (target2);
-  return result;
- }
-
-int is_stop( char r1, char r2, char r3)
-{
-  char codon[4];
-  
-  if (!r2 || !r3) return 0;
-  else if (tolower (r1)=='n' || tolower(r2)=='n' || tolower(r3)=='n') return 0;
-  else 
-    {
-      sprintf (codon, "%c%c%c", tolower(r1), tolower(r2), tolower(r3));
-      if (translate_dna_codon (codon, 'x')=='x')return 1;
-      else return 0;
-    }
-}
-
-
-char * translate_dna_seq_on3frame (  char *dna_seq, char stop, char *prot)
-       {
-         int a, l;
-         char *buf;
-
-         l=strlen (dna_seq);
-         if ( prot==NULL)prot=vcalloc ( l+2, sizeof (char));
-          
-          buf=vcalloc (l+4, sizeof (char));
-          sprintf (buf, "%s", dna_seq);
-          lower_string ( buf);
-          for ( a=0; a< l; a++)buf[a]=(buf[a]=='t')?'u':buf[a];
-          
-          for (a=0; a< l; a++)
-              prot[a]=translate_dna_codon (buf+a, stop);
-          vfree (buf);
-          prot[a]='\0';
-
-          return prot;
-       }
-char * translate_dna_seq ( char *dna_seq, int frame, char stop, char *prot)
-       {
-        //frame: 1->3
-          int a, b, l;
-          char *buf;
-
-           l=strlen (dna_seq);
-          if ( prot==NULL)prot=vcalloc ( l, sizeof (char));
-          frame--;
-          buf=vcalloc (l+4, sizeof (char));
-          sprintf (buf, "%s", dna_seq);
-          lower_string ( buf);
-          for ( a=0; a< l; a++)buf[a]=(buf[a]=='t')?'u':buf[a];
-          
-          
-          for ( b=0,a=0+frame; a< l; a+=3,b++)
-            {
-
-              prot[b]=translate_dna_codon (buf+a, stop);
-            }
-          vfree (buf);
-          prot[b]='\0';
-          upper_string (buf);
-          return prot;
-       }
-char * back_translate_dna_codon ( char aa, int deterministic)
-        {
-       static char *r;
-       int choice;
-       
-       vsrand(0);
-       if ( r==NULL)r=vcalloc (4, sizeof (char));
-       
-       if (!is_gap(aa))aa=tolower(aa);
-       
-       if (is_gap(aa))sprintf (r, "---");
-       else if ( aa>=0 && aa<=9)
-         {
-           sprintf (r, "%d%d%d", aa, aa,aa);
-         }
-       else if ( aa>='0' && aa<='9')
-         {
-            sprintf (r, "%c%c%c", aa, aa,aa);
-         }
-       else if ( aa=='a')
-         {
-           choice=(deterministic)?0:rand()%4;
-           if      ( choice==0)sprintf (r, "gca");
-           else if ( choice==1)sprintf (r, "gcg");
-           else if ( choice==2)sprintf (r, "gcc");
-           else if ( choice==3)sprintf (r, "gct");
-         }
-       else if ( aa=='c')
-         {
-          choice=(deterministic)?0:rand()%2;
-           if      ( choice==0)sprintf (r, "tgc");
-           else if ( choice==1)sprintf (r, "tgt");
-         } 
-       else if ( aa=='d')
-         {
-         choice=(deterministic)?0:rand()%2;
-         if ( choice==0)sprintf (r, "gac");
-         else if ( choice==1)sprintf (r, "gat");
-         }
-       
-       else if ( aa=='e')
-         {
-           choice=(deterministic)?0:rand()%2;
-           if ( choice==0)sprintf (r, "gaa");
-           else sprintf (r, "gag");
-         }
-       else if ( aa=='f')
-         {
-           choice=(deterministic)?0:rand()%2;
-           if ( choice==0)sprintf (r, "ttc");
-           else sprintf (r, "ttt");
-         }
-       else if ( aa=='g')
-         {
-           choice=(deterministic)?0:rand()%4;
-           if  ( choice==0)     sprintf (r, "gga");
-           else if ( choice==1) sprintf (r, "ggg");
-           else if ( choice==2) sprintf (r, "ggc");
-           else if ( choice==3) sprintf (r, "ggt");
-         }     
-       else if ( aa=='h')
-         {
-           choice =rand()%2;
-           if ( choice==0)sprintf (r, "cac");
-           else sprintf (r, "cat");
-         }
-       else if ( aa=='i')
-         {
-           choice=(deterministic)?0:rand()%3;
-           if  ( choice==0)     sprintf (r, "ata");
-           else if ( choice==1) sprintf (r, "atc");
-           else if ( choice==2) sprintf (r, "att");
-         }     
-       else if ( aa=='k')
-         {
-           choice=(deterministic)?0:rand()%2;
-           if  ( choice==0)     sprintf (r, "aaa");
-           else if ( choice==1) sprintf (r, "aag");
-           
-         }
-       else if ( aa=='l')
-         {
-           choice=(deterministic)?0:rand()%6;
-           if  ( choice==0)     sprintf (r, "cta");
-           else if ( choice==1) sprintf (r, "ctg");
-           else if ( choice==2) sprintf (r, "ctc");
-           else if ( choice==3) sprintf (r, "ctt");
-           else if ( choice==4) sprintf (r, "tta");
-           else if ( choice==5) sprintf (r, "ttg");        
-         }     
-       else if ( aa=='m')sprintf ( r, "atg");
-       else if ( aa=='n')
-         {
-           choice=(deterministic)?0:rand()%2;
-           if  ( choice==0)     sprintf (r, "aac");
-           else if ( choice==1) sprintf (r, "aat");
-         }     
-       else if ( aa=='p')
-         {
-           choice=(deterministic)?0:rand()%4;
-           if  ( choice==0)     sprintf (r, "cca");
-           else if ( choice==1) sprintf (r, "ccg");
-           else if ( choice==2) sprintf (r, "ccc");
-           else if ( choice==3) sprintf (r, "cct");
-         }     
-       else if ( aa=='q')
-         {
-           choice=(deterministic)?0:rand()%2;
-           if  ( choice==0)     sprintf (r, "caa");
-           else if ( choice==1) sprintf (r, "cag");
-         }
-        else if ( aa=='r')
-         {
-           choice=(deterministic)?0:rand()%6;
-           if  ( choice==0)     sprintf (r, "cga");
-           else if ( choice==1) sprintf (r, "cgg");
-           else if ( choice==2) sprintf (r, "cgc");
-           else if ( choice==3) sprintf (r, "cgt");
-           else if ( choice==4) sprintf (r, "aga");
-           else if ( choice==5) sprintf (r, "agg");
-           
-         }
-       else if ( aa=='s')
-         {
-           choice=(deterministic)?0:rand()%6;
-           if  ( choice==0)     sprintf (r, "tca");
-           else if ( choice==1) sprintf (r, "tcg");
-           else if ( choice==2) sprintf (r, "tcc");
-           else if ( choice==3) sprintf (r, "tct");
-           else if ( choice==4) sprintf (r, "agt");
-           else if ( choice==5) sprintf (r, "agc");
-           
-         }
-       else if ( aa=='t')
-         {
-           choice=(deterministic)?0:rand()%4;
-           if  ( choice==0)     sprintf (r, "aca");
-           else if ( choice==1) sprintf (r, "acg");
-           else if ( choice==2) sprintf (r, "acc");
-           else if ( choice==3) sprintf (r, "act");
-         }
-       else if ( aa=='v')
-         {
-           choice=(deterministic)?0:rand()%4;
-           if  ( choice==0)     sprintf (r, "gta");
-           else if ( choice==1) sprintf (r, "gtg");
-           else if ( choice==2) sprintf (r, "gtc");
-           else if ( choice==3) sprintf (r, "gtt");
-         }
-       else if ( aa=='w')
-         {
-           sprintf (r, "tgg");
-         }
-       else if ( aa=='y')
-         {
-            choice=(deterministic)?0:rand()%2;
-           if  ( choice==0)     sprintf (r, "tac");
-           else if ( choice==1) sprintf (r, "tat");
-         }
-       else
-         {
-           sprintf (r, "nnn");
-         }
-       return r;
-               
-       }
-int translate_dna_codon ( char *sequence, char stop)
-        {
-       char seq[4];
-       int b;
-       int upper;
-       int ret;
-       
-       if ( strlen (sequence)<1) return 'n';
-       upper=isupper (sequence[0])?1:0;
-       
-       if ( (b=strlen (sequence))<3)
-         ret='x';
-       else
-         {
-           seq[0]=tolower(sequence[0]);
-           seq[1]=tolower(sequence[1]); 
-           seq[2]=tolower(sequence[2]);
-           seq[3]='\0';
-           
-           seq[0]=(seq[0]=='u')?'t':seq[0];
-           seq[1]=(seq[1]=='u')?'t':seq[1];
-           seq[2]=(seq[2]=='u')?'t':seq[2];
-           if ( strm5(seq, "gca", "gcg", "gcc", "gct","gcn"))ret='a';
-           else if ( strm2(seq, "tgc","tgt"))ret='c';
-           else if ( strm2(seq, "gac","gat"))ret='d';
-           else if ( strm2(seq, "gaa","gag"))ret='e';
-           else if ( strm2(seq, "ttc","ttt"))ret='f';
-           else if ( strm5(seq, "gga","ggg","ggc", "ggt", "ggn"))ret='g';
-           else if ( strm2(seq, "cac","cat"))ret='h';
-           else if ( strm3(seq, "ata","atc","att"))ret='i';
-           else if ( strm2(seq, "aaa","aag"))ret= 'k';
-           else if ( strm6(seq, "cta","ctg","ctc", "ctt", "tta", "ttg"))ret='l';
-           else if ( strm (seq, "ctn"))ret='l';
-           else if ( strm (seq, "atg"))ret='m';
-           else if ( strm2(seq, "aac","aat"))ret= 'n';
-           else if ( strm5(seq, "cca","ccg","ccc", "cct","ccn"))ret='p';
-           else if ( strm2(seq, "cag","caa"))ret='q';
-           else if ( strm6(seq, "cga","cgg","cgc", "cgt","aga","agg"))ret='r';
-           else if ( strm (seq, "cgn"))ret= 'r';
-           else if ( strm6(seq, "tca","tcg","tcc", "tct","agc","agt"))ret='s';
-           else if ( strm (seq, "ccn"))ret='s';
-           else if ( strm5(seq, "aca","acg","acc", "act", "acn"))ret='t';
-           else if ( strm5(seq, "gta","gtg","gtc", "gtt", "gtn"))ret='v';
-           else if ( strm (seq, "tgg"))ret='w';
-           else if ( strm2(seq, "tac","tat"))ret='y';
-           else if ( strm3(seq, "tag","taa","tga"))ret=stop;
-           else ret='x';
-           
-           ret= (upper)?toupper(ret):ret;
-         }
-       return ret;
-       }
-
-int extend_seqaln (Sequence *S, Alignment *A)
-{
-  char **s;
-  int n,a;
-  if (S){s=S->seq;n=S->nseq;}
-  else if (A){s=A->seq_al;n=A->nseq;}
-  else return 0;
-  
-  for (a=0; a<n;a++){extend_seq(s[a]);}
-  return 1;
-}
-int unextend_seqaln (Sequence *S, Alignment *A)
-{
-  char **s;
-  int n, a;
-  if (S){s=S->seq;n=S->nseq;}
-  else if (A){s=A->seq_al;n=A->nseq;}
-  else return 0;
-  
-  for (a=0; a<n;a++){unextend_seq(s[a]);}
-  return 1;
-}
-    
-
-char *extend_seq (char *seq)
-{
-  char *buf, *ebuf;
-  int l, lb, a, b, upper,v;
-  char r1, r2;
-  
-  l=strlen (seq);
-  buf =vcalloc ( l+1, sizeof (char));
-  ebuf=vcalloc ( l+1, sizeof (char));
-  sprintf (  buf, "%s", seq);
-  sprintf ( ebuf, "%s", seq);
-  
-  ungap ( buf);
-  ungap (ebuf);
-  lb=strlen (buf);
-  
-  for (a=0; a<lb-1; a++)
-    {
-      r1=buf[a];
-      r2=buf[a+1];
-      
-      upper=(isupper(r1))?1:0;
-      r1=tolower(r1);
-      r2=tolower(r2);
-    
-      r1=(r1=='u')?'t':r1;
-      r2=(r2=='u')?'t':r2;
-            
-      if (r1=='x' || r1=='n')v='x';
-      else if (r2=='n' || r2=='x')v=r1;
-      
-      else if (r1=='a' && r2=='a')v='d';
-      else if (r1=='a' && r2=='c')v='e';
-      else if (r1=='a' && r2=='g')v='f';
-      else if (r1=='a' && r2=='t')v='h';
-      
-      else if (r1=='c' && r2=='a')v='i';
-      else if (r1=='c' && r2=='c')v='k';
-      else if (r1=='c' && r2=='g')v='l';
-      else if (r1=='c' && r2=='t')v='m';
-      
-      else if (r1=='g' && r2=='a')v='n';
-      else if (r1=='g' && r2=='c')v='p';
-      else if (r1=='g' && r2=='g')v='q';
-      else if (r1=='g' && r2=='t')v='r';
-      
-      else if (r1=='t' && r2=='a')v='s';
-      else if (r1=='t' && r2=='c')v='v';
-      else if (r1=='t' && r2=='g')v='w';
-      else if (r1=='t' && r2=='t')v='y';
-      else
-       {
-         v='j';
-       }
-      ebuf[a]=(upper)?toupper(v):v;
-    }
-  
-  for (b=0,a=0; a<l; a++)
-    {
-      if ( !is_gap(seq[a]))seq[a]=ebuf[b++];
-    }
-  vfree (ebuf);
-  vfree (buf);
-  return seq;
-}
-char *unextend_seq (char *seq)
-{
-  char *buf, *ebuf;
-  int l, lb, a, b, upper,v;
-  char r1, r2;
-  
-  l=strlen (seq);
-  buf =vcalloc ( l+1, sizeof (char));
-  ebuf=vcalloc ( l+1, sizeof (char));
-  sprintf (  buf, "%s", seq);
-  sprintf ( ebuf, "%s", seq);
-  
-  ungap ( buf);
-  ungap (ebuf);
-  lb=strlen (buf);
-  
-  for (a=0; a<lb-1; a++)
-    {
-      r1=buf[a];
-      upper=(isupper(r1))?1:0;
-      r1=tolower(r1);
-      r1=(r1=='u')?'t':r1;
-      
-      if (r1=='x')v='n';
-      else if (r1=='d' || r1=='e' || r1 == 'f' || r1 == 'h')v='a';
-      else if (r1=='i' || r1=='k' || r1 == 'l' || r1 == 'm')v='c';
-      else if (r1=='n' || r1=='p' || r1 == 'q' || r1 == 'r')v='g';
-      else if (r1=='s' || r1=='v' || r1 == 'w' || r1 == 'y')v='t';
-      else v='j';
-            
-      ebuf[a]=(upper)?toupper(v):v;
-    }
-  
-  for (b=0,a=0; a<l; a++)
-    {
-      if ( !is_gap(seq[a]))seq[a]=ebuf[b++];
-    }
-  vfree (ebuf);
-  vfree (buf);
-  return seq;
-}
-
-  
-
-Alignment * mutate_aln ( Alignment *A, char *r)
-{
-  int a, b, c, mut,type, ratio;
-  char alp[30];
-  int alp_size;
-  Sequence *S;
-  Alignment*B;
-  int n_mut, tot;
-
-  vsrand(0);
-  if ( r[0]=='\0')ratio=0.01*RAND_MAX;
-  else ratio=atof(r)*RAND_MAX;
-
-  S=aln2seq(A);
-  S=get_sequence_type(S);
-  
-
-
-  if ( strm(S->type, "DNA") ||  strm(S->type, "RNA"))sprintf (alp, "AGCT");
-  else if (  strm(S->type, "PROTEIN"))sprintf (alp, "ACDEFGHIKLMNPQRSTVWY");
-
-  alp_size=strlen(alp);
-
-  B=copy_aln (A,NULL);
-  B=realloc_aln(B, B->len_aln*2+1);
-
-  for ( a=0, b=0; a< A->len_aln; a++, b+=2)
-    {
-      for ( c=0; c< A->nseq; c++)
-       {
-         B->seq_al[c][b]=tolower(A->seq_al[c][a]);
-         B->seq_al[c][b+1]='~';
-       }      
-    }
-
-  for ( c=0; c< A->nseq; c++)B->seq_al[c][b]='\0';
-  B->len_aln=A->len_aln*2;
-  
-
-  tot=n_mut=0;
-  for (a=0; a< B->len_aln; a+=2)
-    for ( b=0; b<B->nseq; b++)
-      {
-       if ( is_gap(B->seq_al[b][a]))continue;
-       mut=((rand()%RAND_MAX)>ratio)?0:1;
-       tot++;
-       n_mut+=mut;
-
-       if (mut)
-         {
-           type=rand()%2;
-           if (type==0)/*deletion*/
-             {
-               B->seq_al[b][a]='.';
-             }
-           else if ( type==1)
-             {
-               B->seq_al[b][a+1]=alp[rand()%alp_size];
-             }
-           else if (type==2)
-             {
-               B->seq_al[b][a]=alp[rand()%alp_size];
-             }
-           
-         }
-      }
-  ungap_aln (B);
-  
-  
-  free_sequence (S, S->nseq);
-  free_aln (A);
-  return B;
-  
-}
-
-char* mutate_amino_acid ( char aa, char *mode)
-
-     {
-        int a, b, c, d;
-        char nucleotide[]="agct";
-        char amino_acid[]="acdefghiklmnpqrstvwy";
-        static char **triplet;
-        static char **cw_col;
-        int ng_cw_col;
-        static int **amino_acid_list;
-        static int *lu;
-        char a1, a2;
-        char *mat;
-        
-        aa=tolower(aa);
-        declare_name(mat);
-        if ( !mode)sprintf (mat, "clustalw_col");
-        else sprintf (mat, "%s", mode);
-        if (!triplet)
-           {
-               triplet=declare_char ( 64, 4);
-               for (d=0, a=0; a< 4;a++)
-                   for ( b=0; b< 4; b++)
-                       for ( c=0; c< 4; c++, d++)
-                           {
-                               triplet[d][0]=nucleotide[a];
-                               triplet[d][1]=nucleotide[b];
-                               triplet[d][2]=nucleotide[c];
-                           }
-           }
-        if ( !cw_col)cw_col=make_group_aa ( &ng_cw_col,mat);
-        if ( !amino_acid_list)
-           {
-               amino_acid_list=declare_int ( 20, 65);
-               for ( a=0; a< 20; a++)
-                   for ( b=0; b< 64; b++)
-                       {
-                           a1=translate_dna_codon ( triplet[b], 'x');
-                           a2=amino_acid[a];
-                           for ( d=0; d< ng_cw_col; d++)
-                               if ( is_in_set ( a1, cw_col[d]) && is_in_set ( a2, cw_col[d]))
-                                  {
-                                      amino_acid_list[a][++amino_acid_list[a][0]]=b;
-                                  }
-                       }
-               lu=vcalloc ( 26, sizeof (int));
-               for ( a=0; a<20; a++)
-                   {
-                       lu[amino_acid[a]-'a']=a;
-                   }
-               /*
-               for ( a=0; a< 20; a++)
-                   {
-                       fprintf ( stderr, "\n%c", amino_acid[a]);
-                       for ( b=1; b<=amino_acid_list[a][0]; b++)
-                           fprintf ( stderr, "\n\t%s %c", triplet[amino_acid_list[a][b]], translate_dna_codon (triplet[amino_acid_list[a][b]], 'x'));
-                   }
-               */                  
-           }
-       
-        return triplet [addrand((unsigned long)amino_acid_list[lu[aa-'a']][0])+1];
-     }                 
-                                
-/**************************************************************************************************/
-/********************************                      ********************************************/
-/********************************    PROCESSING        ********************************************/
-/********************************                      ********************************************/
-
-
-        
-void modify_data  (Sequence_data_struc *D1in, Sequence_data_struc *D2in, Sequence_data_struc *DSTin, char **action_list,int n_actions, Action_data_struc *RAD)
-     {
-       Sequence  *COOR=NULL, *NS=NULL,*BUFS=NULL, *OUT_S=NULL;
-       Constraint_list *CL;
-       char *s;
-       int value,upper_value, lower_value, start, end, a, b,c;
-       int *count_table=NULL;
-       char *action;
-       Sequence_data_struc *D1; 
-       Sequence_data_struc *D2;
-       Sequence_data_struc *DST;
-       int s1, s2, r1, r2;
-       static int clean_flag;
-       Alignment *BUF;
-       
-       /*Switches*/
-
-       action=action_list[0];
-
-       if (action[0]=='2')
-        {
-          
-          D1=D2in;
-          D2=D1in;
-          DST=DSTin;
-          action++;
-        }
-       else if ( action[0]=='1')
-        {
-          D1=D1in;
-          D2=D2in;
-          DST=DSTin;
-          action++;
-        }
-       else if ( action[0]=='3')
-        {
-          D1=DSTin;
-          D2=D1in;
-          DST=DSTin;
-          action++;
-        }
-       else
-        {
-          D1=D1in;
-          D2=D2in;
-          DST=DSTin;
-        }
-       if (!D1->A)D1->A=copy_aln (D1in->A, NULL); 
-        
-       if (  strm(action, "seqnos"))
-        {
-         (D1->A)->output_res_num=1;
-        } 
-       else if ( strm (action,"aln2bootstrap"))
-        {
-          (D1->A)=aln2bootstrap (D1->A, ATOI_ACTION (1));
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm (action,"aln2sample"))
-        {
-          (D1->A)=aln2sample (D1->A, ATOI_ACTION (1));
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm (action,"aln2random_aln"))
-        {
-          (D1->A)=aln2random_aln (D1->A, ACTION (1));
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm (action, "or_scan"))
-        {
-          HERE ("OR SCAN");
-          D1->A=or_scan(D1->A, D2->A, ACTION(1));
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm (action, "or_sar"))
-        {
-          D1->A=or_sar(D1->A, D2->A, ACTION(1), PRINT);
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm ( action, "sar2subsar"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          Alignment *subA, *subS;
-          
-          if ( n_actions==1)
-            {
-              fprintf ( stderr, "\nin=aln, in2=sar sar2subsar [filter value compound1 compound2...] | [jack1] | [file]\n");
-              myexit (EXIT_FAILURE);
-            }
-          
-          sarset2subsarset ( D1->A, D2->A, &subA, &subS, main_read_aln (action_list[2], NULL));
-          D1->A=subA;D2->A=subS;
-        }
-       else if ( strm (action, "display_sar"))
-        {
-          D1->A=display_sar (D1->A, D2->A, action_list[1]);
-        }
-       else if ( strm ( action, "sar2simpred"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          sar2simpred ( D1->A, D2->A, action_list[1], action_list[2], atoi(action_list[3]), atoi (action_list[4]));
-        }
-       else if ( strm ( action, "sar2simpred2"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          if ( n_actions!=5)
-            {
-              fprintf ( stderr, "\nERROR: +sar2simpred2 seqnamesfile posfile compound limit");
-              myexit (EXIT_FAILURE);
-            }
-          sar2simpred2 ( D1->A, D2->A, action_list[1], action_list[2], action_list[3], atoi (action_list[4]));
-        }
-        else if ( strm ( action, "sar_analyze"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          sar_analyze ( D1->A, D2->A,action_list[1]);
-        }
-               else if ( strm ( action, "simple_sar_predict"))
-         {
-           //displays each column with ist score;
-           simple_sar_predict (D1->A, D2->A,ACTION(1));
-           myexit (EXIT_SUCCESS);
-         }
-       else if ( strm ( action, "display_sar_analyze"))
-         {
-           //displays each column with ist score;
-           display_simple_sar_analyze_col (D1->A, D2->A,ACTION(1));
-           myexit (EXIT_SUCCESS);
-         }
-       else if ( strm ( action, "display_sar_analyze_pc"))
-         {
-           //displays each column with ist score;
-           display_simple_sar_analyze_pair_col (D1->A, D2->A,ACTION(1));
-           myexit (EXIT_SUCCESS);
-         }
-       else if ( strm ( action, "weight2sar"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          if ( n_actions!=3)
-            {
-              fprintf ( stderr, "\nERROR: +weight2sar <weight_file> <limit>");
-              myexit (EXIT_FAILURE);
-            }
-          D1->A=weight2sar ( D1->A,D2->A, action_list[1], atoi(action_list[2]));
-          
-        }
-       else if ( strm ( action, "sar_weight"))
-        {
-          /*in->sequences
-            in2->sar data
-          */
-          if ( n_actions!=3)
-            {
-              fprintf ( stderr, "\nERROR: +sar_weight <sar_analyze> <compound>");
-              myexit (EXIT_FAILURE);
-            }
-          D1->A=aln2weighted_sar_score ( D1->A,D2->A, action_list[1], action_list[2]);
-          D1->S=aln2seq ( D1->A);
-        }
-       
-       else if ( strm (action, "name2unique_name"))
-        {
-          char *tmp1, *tmp2;
-          char command[1000];
-          tmp1=vtmpnam (NULL); tmp2=vtmpnam (NULL);
-          
-          output_fasta_aln (tmp1,D1->A);
-          free_aln (D1->A);free_sequence (D1->S, -1);
-          sprintf ( command, "fasta_aln2fasta_aln_unique_name.pl %s >%s", tmp1, tmp2);
-          my_system ( command);
-          D1->S=get_fasta_sequence ( tmp2, NULL);
-          D1->A=seq2aln (D1->S,NULL, 1);
-        }
-       else if ( strm (action, "rm_tag") || strm (action, "rm_template"))
-        {
-
-          char **temp_name=NULL,**temp_list=NULL, temp_nseq=0;
-          int z;
-                       
-          if ( D1 && D1->A){temp_name=(D1->A)->name;temp_nseq=(D1->A)->nseq;}
-          else if ( D1 && D1->S){temp_name=(D1->S)->name;temp_nseq=(D1->S)->nseq;}
-           temp_list=rm_name_tag (temp_name,temp_nseq, NULL);
-          if ( n_actions>1 && strm (action_list[1], "template"))
-             {
-             
-               for ( z=0; z<temp_nseq; z++)
-               {
-               if (temp_list[z][0])
-                       {fprintf (stdout, "%s\n", temp_list[z]);}
-               }
-               myexit (EXIT_SUCCESS);
-             } 
-        }
-       else if (strm (action, "add_template") || strm (action, "swap_header"))
-        {
-          D1->S=seq2template_seq (D1->S, action_list[1], NULL);
-           D1->A=seq2aln(D1->S, NULL, 1);
-        }
-       else if ( strm ( action, "seq2year"))
-        {
-          D1->S=seq2year (D1->S, (n_actions>1)?atoi(action_list[1]):1);
-          D1->A=seq2aln(D1->S, NULL, 1);
-        }
-       else if ( strm (action, "swap_lib_header"))
-        {
-          Sequence *S;
-          S=main_read_seq (action_list[1]);
-          (D1->CL)->S=S;
-          
-        }
-       else if ( strm (action, "weight_lib"))
-        {
-          int l;
-          int w;
-          w=atoi (action_list[1]);
-          if ( D1->CL)
-            {
-              int s1, s2,r1,r2;
-              Sequence *S=(D1->CL)->S;
-              int ***r=(D1->CL)->residue_index;
-              
-              for (s1=0; s1<S->nseq; s1++)
-                for (r1=1; r1<=S->len[s1]; r1++)
-                  for (b=1; b<r[s1][r1][0]; b+=3)
-                    {
-                      r[s1][r1][b+2]=w;
-                    }
-            }
-        }
-       else if ( strm (action, "struc2nb"))
-        {
-          int c;
-          for ( c=0; c< (D1->S)->nseq; c++)
-            {
-              struclist2nb ((D1->S)->name[c],(D1->S)->seq[c], (D1->S)->seq_comment[c], atof(action_list[1]),ACTION(2),ACTION(3) );
-            }
-          myexit (EXIT_SUCCESS);
-        }
-       
-     
-      
-       else if ( strm(action, "seq2contacts"))
-        {
-          int z;
-          D1->S=swap_header (D1->S, D2->S); 
-          for ( z=0; z< (D1->S)->nseq; z++)sprintf ( (D1->A)->name[z], "%s", (D1->S)->name[z]);
-          DST->S=seq2contacts (D1->S, atof (action_list[1]));
-          DST->A=copy_aln (D1->A, NULL);
-          thread_seq_struc2aln ( DST->A,DST->S);
-          for (z=0; z< (D1->S)->nseq; z++)
-          (DST->A)->S=D1->S;
-          
-        }
-       else if ( strm(action, "struc2contacts"))
-        {
-          char *seq;
-          if ( atof (action_list[3])>0)
-            {
-              seq=map_contacts  (action_list[1], action_list[2], atof (action_list[3]));
-              fprintf ( stderr, "\n>%s %s\n%s",action_list[1], action_list[2],seq);
-            }
-          else 
-            print_contacts  (action_list[1], action_list[2], atof (action_list[3]));
-          
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "treelist_prune")|| strm(action, "prune_treelist"))
-        {
-          Sequence *TS;
-          if (D2 && D2->S)TS=D2->S;
-          else TS=treelist2sub_seq((D1->S),ATOI_ACTION(1));
-          treelist2prune_treelist ( D1->S,TS, NULL);
-          D1->A=seq2aln (D1->S, NULL, NO_PAD);
-        }
-       else if ( strm (action, "tree2unresolved_nodes"))
-        {
-          int ns;
-          int *l;
-          ns=tree2nseq (D1->T);
-          l=vcalloc (ns, sizeof (int));
-          tree2nnode_unresolved (D1->T, l);
-          for ( a=0; a<ns; a++)if (l[a])fprintf ( stdout, "SIZE: %d COUNT: %d\n", a, l[a]); 
-          vfree (l);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "tree_prune") || strm(action, "prune_tree"))
-        {
-          D1->T=main_prune_tree ( D1->T, D2->S);
-        }
-       else if ( strm ( action, "tree2seq"))
-        {
-          D1->S=tree2seq(D1->T, NULL);
-          D1->A=seq2aln (D1->S, D1->A, 1);
-          (D1->A)->len_aln=1;
-          for ( a=0; a< (D1->A)->nseq; a++)sprintf ( (D1->A)->seq_al[a], "sequence");
-        }
-       else if ( strm (action, "seq2dpatree"))
-        {
-          D1->T= seq2dpa_tree(D1->S,"ktup");
-        }
-       else if ( strm (action, "tree2dpatree"))
-        {
-          D1->T= tree2dpa_tree(D1->T,(D2 && D2->A)?D2->A:D1->A, (n_actions==1)?"idmat":action_list[1]);
-        }
-       else if ( strm (action, "tree2group"))
-        {
-          vfclose (tree2group (D1->T, (tree2seq(D1->T,NULL)), atoi(action_list[1]), atoi(action_list[2]),(n_actions==4)?action_list[3]:NULL, stdout));    
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "unroot"))
-        {
-          D1->T=unroot_tree(D1->T);
-        }
-     
-       
-       else if ( strm(action, "treelist2group")|| strm(action, "treelist2groups") )
-        {
-          Sequence *TS;
-          
-          if (D2 && D2->S)TS=D2->S;
-          else TS=treelist2seq((D1->S));
-          treelist2groups (D1->S, TS, ACTION(1), stdout);
-          myexit (EXIT_SUCCESS);
-          
-          //      treelist2groups (D1->S,(D2)?D2->S:NULL, ACTION(1), stdout );
-          //exit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "splits2tree"))
-         {
-         
-          D1->T=split2tree ((D2)?D2->T:NULL,D1->S, ACTION(1));
-          
-        }
-       else if ( strm(action, "count_splits"))
-        {
-         
-          count_splits ((D2)?D2->T:NULL,D1->S, ACTION(1));
-          myexit (EXIT_SUCCESS);
-        }
-        else if ( strm(action, "count_groups"))
-        {
-          count_tree_groups (D1->S, ACTION(1));
-        }
-       else if ( strm (action, "tree2dist"))
-        {
-          int ta, tb, ***td;
-          Sequence *TS;
-          
-          TS=(D2)?D2->S:NULL;
-          td=tree2dist (D1->T,TS, NULL);
-          if (!TS)TS=tree2seq(D1->T, NULL);
-          for (ta=0; ta<TS->nseq; ta++)
-            {
-              fprintf ( stdout, "%-15s ",TS->name[ta]);
-              for ( tb=0; tb<TS->nseq; tb++)
-                {
-                  int n=0;
-                  if ( ACTION(1) && strm (ACTION(1), "length"))n=1;
-                  
-                  fprintf (stdout, " %4d", td [n][ta][tb]);
-                }
-              fprintf ( stdout, "\n");
-            }
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "treelist2lti"))
-        {
-          Sequence *TS;
-          if (D2 && D2->S)TS=D2->S;
-          else TS=treelist2sub_seq((D1->S),ATOI_ACTION(2));
-          treelist2lti (D1->S,TS, (int)ATOI_ACTION(1), stdout );
-          myexit (0);
-        }       
-       else if ( strm (action,"treelist2frame"))
-        {
-          Sequence *TS;
-          if (D2 && D2->S)TS=D2->S;
-          else TS=treelist2sub_seq((D1->S),ATOI_ACTION(1));
-          treelist2frame (D1->S, TS);
-          myexit (EXIT_SUCCESS);
-        }
-       
-       else if ( strm (action, "treelist2seq"))
-        {
-          D1->S=treelist2sub_seq (D1->S,ATOI_ACTION(1));
-          D1->A=seq2aln(D1->S, NULL, 1);
-        }       
-       else if ( strm (action, "treelist2leafgroup"))
-        {
-          treelist2leafgroup (D1->S, (D2)?D2->S:NULL, ACTION(1));
-          myexit (0);
-        }       
-       else if ( strm(action, "treelist2splits"))
-        {
-          if (D1->T)D1->S=add_file2file_list ((D1->T)->file, NULL);
-          treelist2splits (D1->S, (D2)?D2->S:NULL);
-        }
-      
-       else if ( strm(action, "treelist2dmat"))
-        {
-          treelist2dmat (D1->S);
-        }
-       else if ( strm(action, "tree2node") )
-        {
-          print_node_list ( D1->T,(DST)?DST->S:NULL);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "tree_cmp_list") )
-        {
-          D1->T=main_compare_trees_list ( D1->T, D2->S, stdout);         
-        }
-       else if ( strm(action, "tree_cmp") || strm (action, "tree_compare"))
-        {
-          D1->T=main_compare_trees ( D1->T, D2->T, stdout);       
-        }
-       else if ( strm (action, "tree_scan"))
-        {
-          D1->T=tree_scan (D1->A, D2->T, ACTION(1), ACTION(2));
-        }
-       else if ( strm (action, "split_cmp"))
-        {
-          main_compare_splits (D1->T, D2->T, ACTION(1), stdout);
-        }
-       
-       else if ( strm(action, "node_sort"))
-        {
-          node_sort ( action_list[1], D1->T);
-          myexit (EXIT_SUCCESS);
-        }
-       
-       else if ( strm ( action, "avg_bootstrap"))
-        {
-          display_avg_bootstrap (D1->T);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "genepred2acc"))
-        {
-          //D2->S=reference
-          //D1->S=prediction
-          vfree (display_accuracy (genepred_seq2accuracy_counts (D2->S, D1->S, NULL),stderr));
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "tree_cog_cmp"))
-        {
-          main_compare_cog_tree (D1->T,action_list[1]);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "tree_aln_cmp"))
-        {
-          main_compare_aln_tree (D1->T, D2->A, stdout);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "change_bootstrap"))
-        {
-          D1->T=reset_boot_tree ( D1->T, (n_actions>=2)?atoi(action_list[1]):0);
-        }
-       else if ( strm(action, "change_distances"))
-        {
-          D1->T=reset_dist_tree ( D1->T, (n_actions>=2)?atof(action_list[1]):0.00);
-        }
-       
-       else if ( strm(action, "aln2tree"))
-        {
-          D1->T=tree_compute (D1->A, n_actions-1, action_list+1);
-        }
-       else if ( strm(action, "similarities2tree"))
-        {
-          D1->T=similarities_file2tree (ACTION(1));
-        }
-       
-       else if (  strm(action, "original_seqnos"))
-        {
-         (D1->A)->output_res_num=2;
-        }
-       
-       else if ( strm (action, "aln2pred"))
-        {
-          aln2pred (D1->A, D2->A, ACTION (1));
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm(action, "evaluate"))
-        {
-          Alignment *A;
-
-
-          DST->A=copy_aln (D1->A, NULL);
-          DST->S=aln2seq(DST->A);
-          if (n_actions>1 && strm (  action_list[1], "categories"))
-            {
-              CL=declare_constraint_list ( DST->S,NULL, NULL, 0,NULL, read_matrice("pam250mt"));
-              DST->A=  main_coffee_evaluate_output(DST->A, CL, "categories");
-            }
-          else if (n_actions>1 && strm (  action_list[1], "sar"))
-            {
-              CL=declare_constraint_list ( DST->S,NULL, NULL, 0,NULL, read_matrice("pam250mt"));
-              DST->A=  main_coffee_evaluate_output(DST->A, CL, "sar");
-            }
-          else if (n_actions>1 && strstr (  action_list[1], "boxshade"))
-            {
-              char color_mode[1000];
-              sprintf (color_mode,"boxshade_%d", atoi(ACTION2(2,"30")));
-              CL=declare_constraint_list ( DST->S,NULL, NULL, 0,NULL, read_matrice("pam250mt"));
-              DST->A=  main_coffee_evaluate_output(DST->A, CL, color_mode);
-            }
-          else
-            {
-              CL=declare_constraint_list ( DST->S,NULL, NULL, 0,NULL, read_matrice((n_actions==1)?"pam250mt":action_list[1]));
-              DST->A=  main_coffee_evaluate_output(DST->A, CL, "matrix");
-            }
-          
-          DST->S=aln2seq ( DST->A);
-          
-          A=D1->A;
-          
-          sprintf ( A->name[A->nseq], "cons");
-          sprintf ( A->seq_al[A->nseq], "%s", aln2cons_seq_mat (A, "idmat"));
-         
-        }
-       else if ( strm (action, "sp_evaluate"))
-        {
-          fprintf ( stdout, "SP Score: %.2f", sum_pair ((DST && DST->A)?DST->A:D1->A,ACTION(1),atoi(ACTION2(2,"0")),atoi(ACTION2(3,"0"))));
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "lat_evaluate"))
-        {
-          float score;
-          score=lat_sum_pair ( D1->A, action_list[1]);
-          fprintf ( stdout, "\nLAT_SCORE: %.2f", score);
-          myexit (EXIT_SUCCESS);
-          
-        }
-       else if ( strm (action, "add_scale"))
-        {
-          D1->A=aln2scale (D1->A, ACTION(1));
-        }
-       else if ( strm (action, "RNAfold_cmp"))
-        {
-          D1->A=compare_RNA_fold (D1->A, D2->A);
-        }
-       else if ( strm (action, "aln2alifold"))
-        {
-          D1->A=aln2alifold (D1->A);
-          D1->S=aln2seq ( D1->A);
-        }
-                
-
-       else if ( strm (action, "add_alifold"))
-        {
-          D1->A=add_alifold2aln (D1->A, (D2)?D2->A:NULL);
-        
-        }
-       else if ( strm (action, "alifold2analyze"))
-        {
-          D1->A=alifold2analyze (D1->A, (D2)?D2->A:NULL, ACTION(1));
-          D1->S=aln2seq(D1->A);
-        }
-       else if ( strm (action, "aln2conservation"))
-        {
-          D1->A=aln2conservation ( D1->A, ATOI_ACTION (1), ACTION (2));
-          myexit (EXIT_FAILURE);
-        }
-       else if ( strm (action, "aln2cons"))
-        {
-          char *cons_seq;
-          char *cons_name;
-          cons_name=vcalloc (100, sizeof (char));
-          sprintf(cons_name, "%s", (n_actions<=2)?"Cons":action_list[2]);
-          cons_seq=aln2cons_seq_mat (D1->A, (n_actions==1)?"blosum62mt":action_list[1]);
-          free_aln (D1->A);free_sequence(D1->S, -1);
-          D1->S=fill_sequence_struc (1, &cons_seq, &cons_name);
-          /*keep the gaps*/
-          (D1->S)->len[0]=strlen (cons_seq); sprintf ( (D1->S)->seq[0], "%s", cons_seq);
-          D1->A=seq2aln (D1->S, NULL, KEEP_GAP);
-          vfree (cons_name);vfree (cons_seq);
-        }
-       else if ( strm (action, "seq2filter"))
-        {
-          D1->S=seq2filter ( D1->S, atoi(action_list[1]), atoi(action_list[2]));
-                             
-        }
-       else if ( strm (action, "aln2resindex"))
-        {
-          //-in: aln, file: ref_seq ref_res target_seq
-          //-in2 target sequences
-          aln2resindex (D1->A, (D2)?D2->A:NULL, stdout);
-          myexit (EXIT_SUCCESS);
-        }
-       else if (strm(action, "keep_name"))
-        {
-          RAD->keep_name=1-RAD->keep_name;
-        }
-        else if (strm(action, "use_consensus") ||strm(action, "use_cons") )
-        {
-          RAD->use_consensus=1-RAD->use_consensus;
-        }
-       else if ( strm(action, "ungap"))
-        {
-          seq2aln (D1->S, D1->A, 1);
-        }
-       else if ( strm2(action, "rmgap", "rm_gap"))
-        {
-
-          ungap_aln_n (D1->A, (n_actions==1)?100:atoi(action_list[1]));
-          //free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-          (D1->A)->S=D1->S;
-        }
-       else if ( strm(action, "rmgap_col"))
-        {
-          D1->A=remove_gap_column ( D1->A,action_list[1]);
-        }
-       else if ( strm(action,"random"))
-        {
-          
-          D1->A= make_random_aln(NULL,(n_actions==1)?1:atoi(action_list[1]),(n_actions==2)?100:atoi(action_list[2]),"acdefghiklmnpqrstvwy");
-          
-          D1->S=aln2seq ( D1->A);
-        }
-           
-       else if ( strm(action, "landscape"))
-         {
-           
-           set_landscape_msa ((n_actions==1)?0:atoi(action_list[1]));
-         }
-       else if ( strm(action, "clean_maln"))
-         {
-           if ( !DST) 
-                  {
-                  fprintf ( stderr,"\n[You Need an evaluation File: Change the output format][FATAL:%s]\n", PROGRAM);  
-                  myexit(EXIT_FAILURE);
-                  }
-           (DST->A)=aln2number (DST->A);
-           D1->A=clean_maln(D1->A, DST->A,(n_actions==1)?1:atoi(action_list[1]),(n_actions==1)?1:atoi(action_list[2]));   
-         }
-       else if ( strm (action, "extract"))
-        {
-          
-          COOR=get_pir_sequence  (RAD->coor_file, NULL);
-          D1->S=extract_sub_seq ( COOR, D1->S);
-          free_aln (D1->A);
-          D1->A=declare_Alignment(D1->S);
-          seq2aln (D1->S, D1->A, RAD->rm_gap);
-          free_sequence (COOR, COOR->nseq);
-        }
-       else if ( strm (action, "reorder_column"))
-        {
-
-
-         
-              Alignment *RO1, *RO2;
-              Sequence *OUT_S;
-              int s;
-              
-              RO1=rotate_aln (D1->A,NULL);
-              if (ACTION(1) && strm (ACTION(1), "tree"))
-                {
-                  D1->T=tree_compute (RO1,n_actions-2, action_list+2);
-                   OUT_S=tree2seq(D1->T, NULL);
-                   RO1=reorder_aln(RO1, OUT_S->name, OUT_S->nseq);
-                 }
-              else if ( ACTION(1) && strm (ACTION(1), "random"))
-                {
-                  RO1=reorder_aln ( RO1, NULL, RO1->nseq);
-                }
-              
-              RO2=rotate_aln (RO1, NULL);
-              for (s=0; s< RO2->nseq; s++)
-                sprintf ( RO2->name[s], "%s", (D1->A)->name[s]);
-              free_aln (RO1);
-              free_aln (D1->A);
-              D1->A=RO2;
-              D1->S=aln2seq(D1->A);
-        }
-                              
-       else if ( strm (action, "reorder"))
-        {
-          
-          if ( n_actions==2 && strm (action_list[1], "random"))
-            {
-              D1->A=reorder_aln ( D1->A, NULL, (D1->A)->nseq);
-            }
-          else if (n_actions==2 && strm (action_list[1], "invert"))
-            {
-              char **nname;
-              int z, y;
-             
-              nname=declare_char ((D1->A)->nseq, 100);
-              for ( z=0,y=(D1->A)->nseq-1; z<(D1->A)->nseq; z++, y--)
-                {
-                  sprintf (nname[z], "%s",(D1->A)->name[y]);
-                }
-
-              D1->A=reorder_aln ( D1->A, nname, (D1->A)->nseq);
-              free_char (nname, -1);
-            }
-          else if (n_actions==2 && strm (action_list[1], "scramble"))
-            {
-              D1->A=aln2scramble_seq(D1->A);
-            }
-
-          else if ( n_actions==2 && strm (action_list[1], "tree"))
-            {
-
-              OUT_S=tree2seq (D2->T, NULL);
-              D1->A=reorder_aln(D1->A, OUT_S->name, OUT_S->nseq);
-              free_sequence (D1->S,(D1->S)->nseq);
-              D1->S=aln2seq (D1->A);
-            }
-          else
-            {
-              (D2->A)->S=aln2seq (D2->A);
-              (D1->A)->S=aln2seq (D1->A);
-              OUT_S=trim_aln_seq_name(D2->A, D1->A);
-              D1->A=reorder_aln(D1->A, OUT_S->name, OUT_S->nseq);
-              free_sequence (D1->S,(D1->S)->nseq);
-              D1->S=aln2seq (D1->A);
-            }
-        }
-       else if ( strm (action, "aln2replicate"))
-        {
-          aln2N_replicate (D1->A, ACTION(1), ACTION(2));
-        }
-       else if ( strm (action, "paralogous_cat"))
-        {
-          D1->A=orthologous_concatenate_aln (D1->A,D2->S, ACTION (1));
-        }
-       
-       else if ( strm (action, "cat_aln"))
-        {
-          /*D1->A=aln_cat ( D1->A, D2 ->A);*/
-
-          if (D2 && D2->A && !ACTION(1))
-            D1->A=concatenate_aln (D1->A, D2->A, ACTION(1));
-          else if (ACTION(1) && is_aln(ACTION(1)))
-            {
-                Alignment *B;
-                int n=1;
-
-                while (ACTION(n))
-                  {
-
-                    B=main_read_aln (ACTION(n), NULL);
-                    D1->A=concatenate_aln (D1->A, B, NULL);
-                    n++;
-                  }
-                D1->S=aln2seq(D1->A);
-            }
-                    
-          else
-            {
-              Alignment *A, *B;
-              
-              A=main_read_aln ((D1->A)->name[0], NULL);
-              
-              for ( a=1; a<(D1->A)->nseq; a++)
-                {
-                  B=main_read_aln ((D1->A)->name[a], NULL);
-                  A=concatenate_aln (A, B, ACTION(1));
-                  
-                }
-              D1->A=A;
-              D1->S=aln2seq(D1->A);
-            }
-        }
-          
-       else if ( strm ( action, "msalist2cat_pwaln"))
-        {
-          int a, b, c;
-          int sim, min, max;
-          
-          if (n_actions!=3)
-            {
-              min=0;
-              max=100;
-            }
-          else
-            {
-              min=atoi(action_list[1]);
-              max=atoi(action_list[2]);
-            }
-          
-          fprintf ( stdout, ">A\n");
-          for (a=0;a<(D1->S)->nseq; a++)
-            {
-              Alignment *A;
-              HERE ("process %s",  (D1->S)->name[a]);
-              A=main_read_aln((D1->S)->name[a],NULL);
-              for (b=0; b<A->nseq-1; b++)
-                {
-                  for ( c=b+1; c<A->nseq; c++)
-                    {
-                      sim=get_seq_sim (A->seq_al[b], A->seq_al[c], "-", "");
-                      if (sim>=min && sim<=max)fprintf (stdout, "xxx%s", A->seq_al[b]);
-                    }
-                }
-              free_aln (A);
-            }
-          fprintf ( stdout, "\n>B\n");
-          for (a=0;a<(D1->S)->nseq; a++)
-            {
-              Alignment *A;
-              HERE ("process %s",  (D1->S)->name[a]);
-              A=main_read_aln((D1->S)->name[a],NULL);
-              for (b=0; b<A->nseq-1; b++)
-                {
-                  for ( c=b+1; c<A->nseq; c++)
-                    {
-                      sim=get_seq_sim (A->seq_al[b], A->seq_al[c], "-", "");
-                      if (sim>=min && sim<=max)fprintf (stdout, "xxx%s", A->seq_al[c]);
-                    }
-                }
-              free_aln (A);
-            }
-          
-          fprintf ( stdout, "\n");
-          myexit (EXIT_SUCCESS);
-        }
-       
-       else if ( strm (action, "collapse_tree"))
-        {
-          D1->T=tree2collapsed_tree (D1->T, n_actions-1, action_list+1);
-        }
-       else if ( strm (action, "collapse_aln"))
-        {
-          D1->A=aln2collapsed_aln (D1->A, n_actions-1, action_list+1);
-        }
-       else if ( strm (action, "extract_aln"))
-        {
-          D1->A=aln2sub_aln_file (D1->A, n_actions-1, action_list+1);
-          myexit (EXIT_SUCCESS);
-        }
-      
-       
-      
-       else if ( strm (action, "remove_aa"))
-        {
-          int pos,len, n;
-          pos=atoi(action_list[1]);
-          len=atoi(action_list[2]);
-          n=atoi (action_list[3]);
-          if ( atoi (action_list[4])==1)len=-len; 
-          if (pos && n>1) 
-            {
-              fprintf ( stderr, "\nWARNING: rm_aa, position (pos) and iteration number (n) simulatneously defined. Iteration number reset to 1 [%s]\n", PROGRAM);
-              n=1;
-            }
-          for ( a=0; a< n; a++)
-            D1->A=probabilistic_rm_aa (D1->A, pos, len);
-        }
-       else if ( strm (action, "remove_nuc"))
-        {
-          int pos;
-          pos=atoi(action_list[1]);
-          
-          if ( pos>3 || pos<1)
-            printf_exit (EXIT_FAILURE, stderr, "Remove_nuc: indicate a number between 1 and 3\n");
-          
-          pos--;
-          for ( c=0,a=0; a<(D1->A)->len_aln; a++, c++)
-            {
-              if (c==3)c=0;
-              for (b=0; b<(D1->A)->nseq; b++)
-                {
-                if (c==pos)
-                  {
-                    (D1->A)->seq_al[b][a]='-';
-                  }
-                }
-            }
-          
-          D1->S=aln2seq (D1->A);
-        }
-       
-       else if (strm ( action, "conserved_positions"))
-        {
-          Alignment *A;
-          int  a, b, c;
-          int *cache=NULL;
-          
-
-          A=D1->A;
-          for ( a=0; a< A->nseq && !cache; a++)
-            {
-              if ( strm (action_list[1], A->name[a]))
-                {
-                  cache=vcalloc ( A->len_aln+1, sizeof (int));
-                  for ( c=0,b=0; b<A->len_aln; b++)
-                    {
-                      if ( is_gap (A->seq_al[a][b]))cache[b]=-1;
-                      else cache[b]=++c;
-                    }
-                }
-            }
-
-          for ( a=0; a< A->len_aln; a++)
-            {
-              r1=A->seq_al[0][a];
-              if ( is_gap(r1))continue;
-              for ( c=0,b=0; b<A->nseq; b++)
-                {
-                  r2=A->seq_al[b][a];
-                  c+=(r1==r2)?1:0;
-                }
-              if ( (c*100)/A->nseq>=atoi(action_list[2]))
-                fprintf ( stdout, "COL: %d Res: %c %s %d\n", a+1, r1, action_list[1], cache[a]+atoi(action_list[3]));
-            }
-          myexit (EXIT_FAILURE);
-        }
-       else if (strm ( action, "extract_block") )
-        {
-          
-          BUF=copy_aln (D1->A, NULL);
-          if ( check_file_exists(action_list[1]))
-            BUF=extract_aln3(BUF,action_list[1]);
-          else
-            BUF=extract_aln2(BUF,atoi(action_list[2]),atoi(action_list[3]),action_list[1]);
-          D1->A=copy_aln (BUF,D1->A);
-         
-        }
-       else if ( strm ( action, "extract_pos_list"))
-        {
-          D1->A=alnpos_list2block (D1->A, n_actions-1, action_list+1);
-        }
-       else if ( strm ( action, "seq2msa"))
-        {
-          D1->A=simple_progressive_aln ( D1->S, NULL, NULL, action_list[1]);
-        }
-       else if ( strm ( action, "realign_block") )
-        {
-          D1->A=realign_block ( D1->A, atoi (action_list[1]), atoi (action_list[2]), (n_actions==4)?action_list[3]:NULL);
-        }
-       else if ( strm (action, "extract_seq"))  
-        {
-          int is_file;
-          if ( check_file_exists (action_list[1])&& format_is_fasta (action_list[1]))
-            {
-              is_file=1;
-              BUFS=main_read_seq (action_list[1]);
-              action_list=BUFS->name;
-              n_actions=BUFS->nseq;           
-            }
-          else
-            {
-              is_file=0;
-              action_list++;
-              n_actions--;
-            }
-          
-          for ( a=0; a< n_actions;)
-            {
-              s=action_list[a];
-              
-              if ( n_actions==1 || is_file==1)
-                {
-                  start=1;
-                  end=0;
-                  a+=1;
-                }
-              else
-                {
-
-                  start=(strm2 (s,"#","*"))?1:(atoi(action_list[a+1]));
-                  end=  (strm2 (action_list[a+2],"#","*"))?0:(atoi(action_list[a+2]));
-                  a+=3;
-                }
-              
-              if ( strm2 (s, "#", "*"))
-                {
-                  OUT_S=extract_one_seq((D1->A)->name[0],start, end, D1->A, RAD->keep_name);
-                  for (b=1; b< (D1->A)->nseq; b++)
-                    {
-                     NS=extract_one_seq((D1->A)->name[b],start, end, D1->A, RAD->keep_name);
-                     if (count_n_res_in_array(NS->seq[0], -1))
-                       OUT_S=add_sequence ( NS,OUT_S, 0);
-                    }
-                }
-              else
-                {
-                 if ( a==1)OUT_S=extract_one_seq(s,start, end, D1->A, RAD->keep_name);
-                 else
-                   {
-                     NS=extract_one_seq(s,start, end, D1->A, RAD->keep_name); 
-                     OUT_S=add_sequence ( NS,OUT_S, 0);
-                   }
-                }
-            }
-          D1->S=OUT_S;
-          free_aln (D1->A);
-          D1->A=declare_Alignment(D1->S);
-          seq2aln (D1->S, D1->A, RAD->rm_gap);
-        }
-       
-       else if ( strm (action, "extract_seq_list"))     
-        {
-          if ( check_file_exists (action_list[1]) && format_is_fasta (action_list[1]))
-            {
-             
-              BUFS=main_read_seq (action_list[1]);
-              action_list=BUFS->name;
-              n_actions=BUFS->nseq;           
-            }
-          else
-            {
-              action_list++;
-              n_actions--;
-            }
-          
-          for ( a=0; a< n_actions;a++)
-            {
-           
-              NS=extract_one_seq(action_list[a],1,0, D1->A, KEEP_NAME); 
-              OUT_S=add_sequence ( NS,OUT_S, 0);
-           
-            }
-          
-          D1->S=OUT_S;
-          free_aln (D1->A);
-          D1->A=declare_Alignment(D1->S);
-          seq2aln (D1->S, D1->A, RAD->rm_gap);
-        }
-       else if ( strm (action, "remove_seq") || strm (action, "rm_seq"))        
-        {
-          char *buf;
-          char **list;
-          int n;
-          int l;
-          
-          list=declare_char ((D1->S)->nseq, 200);
-          
-          buf=vcalloc ((D1->S)->max_len+1, sizeof (char));
-          for ( n=0,a=0; a< (D1->A)->nseq; a++)
-            {
-              
-              sprintf (buf, "%s", (D1->S)->seq[a]);
-              ungap (buf);
-              l=strlen(buf);
-              
-              for (c=1, b=1; b< n_actions; b++)
-                {
-                  if ( strm (action_list[b], (D1->S)->name[a])){(D1->S)->seq[a]=NULL;break;}
-                  else if ( strm (action_list[b], "empty") && l==0)
-                    {
-                      fprintf ( stderr, "WARNING: Sequence %s does not contain any residue: automatically removed from the set [WARNING:%s]\n",(D1->S)->name[a], PROGRAM);
-                      (D1->S)->seq[a]=NULL;break;
-                    }
-                  else if ( strm (action_list[b], "unique"))
-                    {
-                      if ( name_is_in_list ((D1->S)->name[a], list,n, 100)!=-1)
-                        {
-                          (D1->S)->seq[a]=NULL;break;
-                        }
-                      else
-                        {
-                          sprintf ( list[n++], "%s", (D1->S)->name[a]);
-                        }
-                    }
-                }
-            }
-          D1->S=duplicate_sequence (D1->S);
-          free_aln (D1->A);
-          free_char ( list, -1);
-          D1->A=declare_Alignment(D1->S);
-          seq2aln (D1->S, D1->A, RAD->rm_gap);
-        }
-       
-       else if (  strm (action, "aln2overaln")|| strm (action,"overaln_param"))
-        {
-          //mode (lower|number|uanlign) Penalty (0-100) Thresold (0-9)
-          int  p1,p2,p3,f, t;
-          char *s;
-          int eb=0;
-          char clean_mode[100];
-          OveralnP *F;
-
-          F=vcalloc (1, sizeof (OveralnP));
-          if ( D2 && D2->A)
-            {
-              D1->A=mark_exon_boundaries (D1->A, D2->A);
-              eb=1;
-            }
-          else if ( (s=get_string_variable ("exon_boundaries")))
-            {
-             Sequence *S;
-             Alignment *EB;
-             EB=seq2aln(S=main_read_seq(s),NULL, 0);
-             D1->A=mark_exon_boundaries (D1->A, EB);
-             free_sequence (S, S->nseq); free_aln (EB);
-             eb=1; 
-            }
-          
-
-          if (ACTION(1)==NULL)sprintf (F->mode, "lower");
-          else if (strstr (ACTION(1), "h"))
-            {
-              fprintf ( stdout, "aln2unalign lower|number|unalign|uanlign2 F P1 P2 P3 T\n");
-              myexit (EXIT_SUCCESS);
-            }
-          else sprintf (F->mode, "%s", ACTION(1));
-          
-          F->t=ATOI_ACTION(2);
-          F->f=ATOI_ACTION(3);
-          F->p1=ATOI_ACTION(4); 
-          F->p2=ATOI_ACTION(5);
-          F->p3=ATOI_ACTION(6);
-          F->p3=ATOI_ACTION(7);
-          
-          if (int_variable_isset ("overaln_target"))f=get_int_variable ("overaln_target");
-          if (int_variable_isset ("overaln_threshold"))t=get_int_variable ("overaln_threshold");
-          if (eb)sprintf (F->model, "fsa2");
-          else   sprintf (F->model, "fsa1");
-          
-          D1->A=aln2clean_pw_aln (D1->A, F);
-          
-        }
-       else if (  strm (action, "unalign_groups"))
-        {
-          //unalign everything in lower case
-          unalign_aln_2 (D1->A, NULL, 0);
-        }
-       else if (  strm (action,"aln2unalign"))
-        {
-          Alignment *SA;
-          Sequence *SS;
-          SA=copy_aln (D1->A, NULL);
-          SS=aln2seq(SA);
-          
-          thread_seq_struc2aln (SA, SS);
-          D1->A=unalign_aln (D1->A,SA, ATOI_ACTION(1));
-          D1->S=aln2seq ( D1->A);
-        }
-       else if (  strm (action, "clean_cdna"))
-        { 
-          Alignment *A;
-          A=D1->A;
-          for (a=0; a< A->nseq; a++)
-            {
-              char *d, *buf, f;
-              
-              d=A->seq_al[a];
-              f=get_longest_frame (d, 3);
-              buf=vcalloc ( strlen (d)+1, sizeof (char));
-              sprintf (buf, "%s", d+f);
-              sprintf (d, "%s", buf);
-              vfree (buf);
-            }
-        }
-       else if ( strm (action, "clean_cdna2"))
-        {
-          D1->A=clean_cdna_aln ( D1->A);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if ( strm  (action, "aln2short_aln"))
-          {
-            D1->A=aln2short_aln (D1->A, action_list[1], action_list[2], atoi(action_list[3]));
-            free_sequence ( D1->S, (D1->S)->nseq);
-            D1->S=aln2seq ( D1->A);
-          }
-       else if ( strm ( action, "complement"))
-        {
-          D1->A=complement_aln (D1->A);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if ( strm ( action, "extend"))
-        {
-          extend_seqaln( NULL,D1->A);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if ( strm ( action, "unextend"))
-        {
-          unextend_seqaln( NULL,D1->A);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if ( strm ( action, "translate"))
-        {
-          D1->A=translate_dna_aln( D1->A,(n_actions==1)?0:atoi(action_list[1]));
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if (strm2 ( action, "back_translate","backtranslate"))
-        {
-         D1->A=back_translate_dna_aln( D1->A);
-         free_sequence ( D1->S, (D1->S)->nseq);
-         D1->S=aln2seq ( D1->A);
-        }
-       else if (strm ( action, "rotate"))
-        {
-          D1->A=rotate_aln( D1->A, action_list[1]);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq ( D1->A);
-        }
-       else if (strm ( action, "invert"))
-        {
-         D1->A=invert_aln( D1->A);
-         free_sequence ( D1->S, (D1->S)->nseq);
-         D1->S=aln2seq ( D1->A);
-        }
-       else if (strm ( action, "test_dna2gene"))
-        {
-          testdna2gene ((D1->S)->seq[0]);
-        }
-       else if (strm ( action, "code_dna_aln"))
-        {
-         D1->A=code_dna_aln( D1->A);
-         free_sequence ( D1->S, (D1->S)->nseq);
-         D1->S=aln2seq ( D1->A);
-        }
-       
-       else if ( strm ( action, "mutate"))
-        {
-          D1->A=mutate_aln( D1->A,(n_actions==1)?"0":action_list[1]);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm ( action, "thread_profile_on_msa"))
-        {
-          (D1->A)->S=NULL;
-          D1->A=thread_profile_files2aln (D1->A, action_list[1], NULL);
-          D1->S=aln2seq(D1->A);
-        }
-       else if ( strm ( action, "thread_dna_on_prot_aln"))
-         {
-           D1->A=thread_dnaseq_on_prot_aln (D1->S, D2->A);
-           free_sequence (D1->S,(D1->S)->nseq);
-           D1->S=aln2seq (D1->A); 
-         }
-       else if ( strm ( action, "thread_struc_on_aln"))
-        {
-          thread_seq_struc2aln ( D2->A, D1->S);
-          D1->A=copy_aln(D2->A, D1->A);
-          free_sequence ( D1->S, (D1->S)->nseq);
-          D1->S=aln2seq (D1->A);
-        }
-       else if ( strm (action, "sim_filter"))
-        {
-          D1->A=sim_filter (D1->A, action_list[1], ACTION (2));
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-        }
-       else if ( strm (action, "seq2blast"))
-        {
-          D1->A=seq2blast (D1->S);
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-        }
-          
-       else if ( strm (action, "trim"))
-        {
-          D1->A=simple_trimseq (D1->A,(D2)?D2->A:NULL, action_list[1], ACTION (2), NULL);
-          
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-        }
-       
-       else if (strm ( action, "trimTC"))
-        {
-          value=(n_actions==1)?10:atoi(action_list[1]);
-       
-          D1->A=tc_trimseq(D1->A,D1->S,action_list[1]);
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-        }
-       else if (strm ( action, "trimTC2"))
-        {
-          char *group_file;
-          Alignment *B=NULL;
-          char trim_mode[100];
-          if ( n_actions==1 || !(strm (action_list[1], "NSEQ") ||strm (action_list[1], "MINID")) )
-            {
-              fprintf ( stderr, "\nTrimTC2 <NSEQ | MINID>  <number sequences| minimum identity> (<matrix>)\n");
-              myexit (EXIT_FAILURE);
-            }
-          sprintf (trim_mode, "%s", action_list[1]);action_list+=2; n_actions-=2;
-          
-          if ( strm ( trim_mode, "NSEQ"))
-            {
-              group_file=tree2Ngroup( (D1)?D1->A:NULL, (D2)?D2->T:NULL, atoi (action_list[0]), vtmpnam(NULL), (n_actions==1)?"idmat":action_list[1]);
-            }
-          else
-            {
-              group_file=tree2Ngroup( (D1)?D1->A:NULL, (D2)?D2->T:NULL, -1*atoi (action_list[0]), vtmpnam(NULL), (n_actions==1)?"idmat":action_list[1]);
-            }
-          
-          B=copy_aln (D1->A, B);
-          B=aln2sub_aln_file (B,1,&group_file);
-          B=aln2sub_seq (B, 1, &group_file);
-          D1->A=extract_sub_aln2 (D1->A, B->nseq, B->name);
-        }
-       else if ( strm (action, "chain"))
-        {
-          D1->A=seq2seq_chain (D1->A,D2->A, ACTION(2));
-        }
-       
-       
-       else if (strm ( action, "master_trim"))
-        {
-          value=(n_actions==1)?10:atoi(action_list[1]);
-       
-          D1->A=master_trimseq(D1->A,D1->S,action_list[1]);
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-        }
-        else if ( strm (action, "force_aln"))   
-        {
-          char ***rlist=NULL;
-          int count=0;
-
-          if ( n_actions==2)
-            {
-              if (!is_lib_02(action_list[1]))
-                {
-                  fprintf ( stderr, "\nERROR: force_aln requires files in TC_LIB_FORMAT_02 [FATAL:%s]", PROGRAM);
-                  myexit (EXIT_FAILURE);
-                }
-              else
-                  rlist=file2list (action_list[1], " ");
-            }
-          else
-            {
-              rlist=declare_arrayN(3, sizeof (char),3,7, 10);
-              
-              strcat (rlist[1][1],action_list[1]);strcat (rlist[1][3],action_list[2]);
-              strcat (rlist[1][4],action_list[3]);strcat (rlist[1][6],action_list[4]);
-              sprintf ( rlist[2][0], "-1");
-            }
-          count=1;
-          while (rlist[count] && atoi(rlist[count][0])!=-1)
-            {
-              char st1[100], st2[100], st3[100], st4[100];
-              
-              sprintf ( st1, "%s", rlist[count][1]);sprintf ( st2, "%s", rlist[count][3]);
-              sprintf ( st3, "%s", rlist[count][4]);sprintf ( st4, "%s", rlist[count][6]);
-              fprintf ( stderr, "\nFORCE: %s %s %s %s", st1, st2, st3, st4);
-              
-              if (is_number (st1))s1=atoi (st1)-1;
-              else s1=name_is_in_list (st1,(D1->A)->name, (D1->A)->nseq, 100);
-              if ( s1<0 || s1>= (D1->A)->nseq)crash ("wrong sequence index");
-              r1=atoi (st2)-1;
-              
-              if (is_number (st3))s2=atoi (st3)-1;
-              else s2=name_is_in_list (st3,(D1->A)->name, (D1->A)->nseq, 100);
-              if ( s2<0 || s2>= (D1->A)->nseq)crash ("wrong sequence index");
-              r2=atoi (st4)-1;
-              
-              (D1->A)=add_constraint2aln ((D1->A), s1, r1, s2, r2);
-              count++;
-            }
-          fprintf ( stderr, "\n");
-          free_arrayN((void*)rlist,3);
-        }
-      
-        else if (strm ( action, "grep"))
-         {
-           D1->A=grep_seq (D1->A, ACTION(1),ACTION(2), ACTION(3));
-           if (D1->A==NULL) myexit (EXIT_SUCCESS);
-           else D1->S=aln2seq (D1->A); 
-         }
-                     
-       else if (strm (action, "find"))
-         {
-           int r, l;
-           char *search_string;
-
-           search_string=vcalloc ( 30, sizeof (char));
-           if ( strm (action_list[1], "lower"))sprintf ( search_string, "abcdefghijklmnopqrstuvwxyz");
-           else if ( strm ( action_list[1], "upper"))sprintf ( search_string, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
-           else 
-             {
-               vfree (search_string);search_string=vcalloc ( strlen (action_list[1])+1, sizeof (char));
-               sprintf (search_string, "%s", action_list[1]);
-             }
-           
-           for (a=0; a<(D1->A)->nseq; a++)
-             for ( l=0,b=0; b< (D1->A)->len_aln; b++)
-               {
-                 r=(D1->A)->seq_al[a][b];
-                 l+=!is_gap(r);
-                 if ( r!='\0' && strrchr (search_string, r))
-                   {
-                     /*fprintf ( stdout, "%-15s res %c alnpos %4d seqpos %4d\n", (D1->A)->name[a], r, b+1, l);*/
-                     fprintf ( stdout, "%s %d %d\n", (D1->A)->name[a], l, l+1);
-                   }
-               }
-           myexit (EXIT_SUCCESS);
-         }
-        else if ( strm (action, "merge_annotation"))
-         {
-           D1->A=merge_annotation (D1->A, DST?DST->A:NULL, ACTION(1));
-           D1->S=aln2seq (D1->A); 
-         }
-       else if ( strm  (action, "color_residue"))
-         {
-           int i;
-           Alignment *A;
-           A=D1->A;
-           
-           DST->A=copy_aln (D1->A, NULL);
-           DST->S=aln2seq (DST->A);
-           for (a=0; a< (DST->S)->nseq; a++)ungap ((DST->S)->seq[a]);
-           
-           if (n_actions>2)
-             {
-               for (a=1; a<n_actions; a+=3)
-                 {
-                   i=name_is_in_list(action_list[a], (D1->A)->name, (D1->A)->nseq, 100);
-                   if (i!=-1)
-                     {
-                       (DST->S)->seq[i][atoi(action_list[a+1])-1]='0'+atoi(action_list[a+2])-1;
-                     }
-                   else fprintf (stderr, "\nWARNING: Could not find Sequence %s", action_list[a]);
-                 }
-             }
-           else
-             {
-               char name[1000];
-               int pos, val;
-               FILE *fp;
-               
-               fp=vfopen (action_list[1], "r");
-               while (fscanf (fp, "%s %d %d\n", name, &pos, &val)==3)
-                 {
-               
-                    i=name_is_in_list(name, (D1->A)->name, (D1->A)->nseq, 100);
-                    if (i!=-1)(DST->S)->seq[i][pos-1]='0'+val; 
-                    else fprintf (stderr, "\nWARNING: Could not find Sequence %s", action_list[a]);
-                 }
-               vfclose (fp);
-             }
-           DST->A=seq2aln (DST->S, NULL, 1);
-         }
-       else if ( strm  (action, "edit_residue"))
-         {
-           FILE *fp;
-           int i, pos;
-           int **p;
-           char mod[100], name[100];
-           Alignment *A;           
-           
-           A=D1->A;
-           
-           p=aln2inv_pos (A);
-           if (n_actions>2)
-             {
-               for (a=1; a<n_actions; a+=3)
-                 {
-                   
-                   i=name_is_in_list(action_list[a], (D1->A)->name, (D1->A)->nseq, 100);
-                   if (i!=-1)
-                     {
-                       pos=atoi(action_list[a+1]);
-                       
-                       pos=p[i][pos]-1;
-                       sprintf (mod, "%s", action_list[a+2]);
-                       if ( strm (mod, "upper"))(D1->A)->seq_al[i][pos]=toupper((D1->A)->seq_al[i][pos]);
-                       else if ( strm (mod, "lower"))(D1->A)->seq_al[i][pos]=tolower((D1->A)->seq_al[i][pos]);
-                       else (D1->A)->seq_al[i][pos]=mod[0];
-                     }
-                   else fprintf (stderr, "\nWARNING: Could not find Sequence %s", action_list[a]);
-                   
-                 }
-             }
-           else
-             {
-               fp=vfopen (action_list[1], "r");
-               while (fscanf (fp, "%s %d %s\n", name, &pos, mod)==3)
-                 {
-               
-                    i=name_is_in_list(name, (D1->A)->name, (D1->A)->nseq, 100);
-                    if (i!=-1)
-                      {
-                        pos=p[i][pos]-1;
-                        if ( strm (mod, "upper"))(D1->A)->seq_al[i][pos]=toupper(A->seq_al[i][pos]);
-                        else if ( strm (mod, "lower"))A->seq_al[i][pos]=tolower(A->seq_al[i][pos]);
-                        else A->seq_al[i][pos]=mod[0];
-                      }
-                     else fprintf(stderr, "\nWARNING: Could not find Sequence %s", action_list[1]);
-                 }
-               vfclose (fp);
-             }
-           D1->S=aln2seq (D1->A);
-         }
-       else if ( strm (action, "clean_flag"))
-        {
-          clean_flag=1-clean_flag;
-        }
-       else if ( strm  (action, "aln2case"))
-        {
-          D1->A=aln2case_aln (D1->A, ACTION(1), ACTION(2));
-          D1->S=aln2seq(D1->A);
-        }
-       
-       else if ( strm5 (action, "convert","upper","lower", "keep", "switchcase"))
-        {
-          b=1;
-
-          if ( n_actions>1 && is_number (action_list[b]))
-            {
-              lower_value=upper_value=atoi(action_list[b++]);
-            }
-          else if ( n_actions>1 && strm (action_list[b], "gap"))
-            {
-              DST=vcalloc (1,sizeof(Sequence_data_struc));
-              DST->A=aln2gap_cache (D1->A,0);
-              lower_value=0;
-              upper_value=0;
-              b++;
-            }
-          else if (n_actions>1 && action_list[b] && action_list[b][0]=='[')
-            
-            {
-              lower_value=atoi(strtok (action_list[b]+1, "-[]"));
-              upper_value=atoi(strtok (NULL, "-[]"));
-            
-              b++;
-            }
-          else
-            {
-              lower_value=upper_value=-1;
-            }
-
-          if ( n_actions >b ||strm (action, "keep") )
-            {
-              if ( !RAD->symbol_list)RAD->symbol_list=declare_char (STRING, STRING);
-              RAD->n_symbol=0;
-              if ( strm (action, "keep") )sprintf ( RAD->symbol_list[RAD->n_symbol++], "#-");
-              else
-                {
-                  for (a=b; a< n_actions; a++)
-                    {
-                      sprintf ( RAD->symbol_list[RAD->n_symbol], "%s", action_list[a]);
-                      RAD->n_symbol++;
-                    }
-                }
-            }
-          
-          for ( value=0; value<=9; value++)
-            {
-              if ( lower_value==-1)value=-1;
-              
-              if ( (value>=lower_value && value<=upper_value)|| value==-1)
-                {
-                  if (strm(action,"convert")) D1->A=filter_aln_convert (D1->A, DST?DST->A:NULL,RAD->use_consensus,value,RAD->n_symbol, RAD->symbol_list);
-                  else if (strm(action,"upper"))D1->A=filter_aln_lower_upper (D1->A, DST?DST->A:NULL,RAD->use_consensus,value);
-                  else if (strm(action,"lower"))D1->A=filter_aln_upper_lower (D1->A, DST?DST->A:NULL,RAD->use_consensus,value);
-                  else if (strm(action,"switchcase"))D1->A=filter_aln_switchcase (D1->A, DST?DST->A:NULL,RAD->use_consensus,value);
-                }
-              else
-                {
-                  if (strm(action,"keep")) D1->A=filter_aln_convert (D1->A, DST?DST->A:NULL,RAD->use_consensus,value,RAD->n_symbol, RAD->symbol_list);
-                }
-              if (value==-1)break;
-
-            }
-
-          /*free_sequence (D1->S,(D1->S)->nseq);*/
-          if (!D1->S)D1->S=aln2seq (D1->A); 
-        } 
-       else if ( strm ( action, "count_pairs"))
-         {
-           int a, b,c,v, **matrix;
-           Alignment *A;
-           matrix=declare_int (300,300);
-           A=D1->A;
-           for ( a=0; a< A->nseq-1; a++)
-             for (b=0; b< A->nseq; b++)
-               for (c=0; c<A->len_aln; c++)
-                 matrix[(int)A->seq_al[a][c]][(int)A->seq_al[b][c]]++;
-           for ( a=0; a<255; a++)
-             for ( b=a; b<256; b++)
-               {
-                 v=matrix[a][b]+matrix[b][a];
-                 if (v)fprintf ( stdout, "\n%c %c %d", a, b, v);
-               }
-           myexit (EXIT_SUCCESS);
-         }
-       else if ( strm (action, "count_misc"))
-         {
-           count_misc (D1->A, (!D2)?NULL:D2->A);
-         }
-       else if ( strm (action, "count"))
-        {
-          b=1;
-          if ( n_actions>1 && is_number (action_list[b]))
-            {
-              lower_value=upper_value=atoi(action_list[b++]);
-            }
-          else if (n_actions>1 && action_list[b] && action_list[b] && action_list[b][0]=='[')
-            
-            {
-              lower_value=atoi(strtok (action_list[b]+1, "-[]"));
-              upper_value=atoi(strtok (NULL, "-[]"));
-            
-              b++;
-            }
-          else
-            {
-              lower_value=upper_value=-1;
-            }
-          if ( n_actions >b)
-            {
-              if ( !RAD->symbol_list)RAD->symbol_list=declare_char (STRING, STRING);
-              RAD->n_symbol=0;
-              for (a=b; a< n_actions; a++)
-                {
-                  sprintf ( RAD->symbol_list[RAD->n_symbol], "%s", action_list[a]);
-                  RAD->n_symbol++;
-                }
-            }
-          for ( value=lower_value; value<=upper_value; value++)
-            {
-              count_table=count_in_aln (D1->A, DST?DST->A:NULL,value,RAD->n_symbol, RAD->symbol_list, count_table);           
-            }
-          for ( a=0; a<RAD->n_symbol; a++)
-            {
-              fprintf ( stdout, "%s %d\n", RAD->symbol_list[a], count_table[a]);
-            }
-          free_sequence (D1->S,(D1->S)->nseq);
-          D1->S=aln2seq (D1->A); 
-          vfree(count_table);
-          myexit(EXIT_SUCCESS);
-        }
-       else if ( strm (action, "species_weight"))
-        {
-          seq_weight2species_weight (D1->A, D2->S);
-          exit (0);
-        }
-       else if ( strm (action, "aln2voronoi"))
-        {
-          aln2voronoi_weights (D1->A);
-          
-        }
-       else if ( strm (action, "msa_weight"))
-        {
-          int random_value;
-          char command [LONG_STRING];
-          char aln_name[FILENAMELEN];
-          char tree_name[FILENAMELEN];
-          char dist_matrix_name[FILENAMELEN];
-          char weight_name[FILENAMELEN]; 
-          char method_4_msa_weights[1000];
-          
-          if ( n_actions==1)
-            {
-              fprintf ( stderr, "\nError: msa_weight requires a weight_method");
-            }
-          
-          sprintf ( method_4_msa_weights, "%s", (get_env_variable ("METHOD_4_MSA_WEIGHTS",NO_REPORT))?get_env_variable ("METHOD_4_MSA_WEIGHTS",NO_REPORT):METHOD_4_MSA_WEIGHTS);
-          
-          /*1 Computation of the tree and the distance matrix*/
-          random_value=addrand ((unsigned long) 100000)+1;
-          sprintf (aln_name, "%d.aln", random_value);
-          sprintf (tree_name, "%d.ph", random_value);
-          sprintf (dist_matrix_name, "%d.dst", random_value);
-          sprintf (weight_name, "%d.weight", random_value);
-          output_fasta_aln (aln_name, D1->A);
-         
-          sprintf ( command, "clustalw -infile=%s -tree -outputtree=dist %s", aln_name, TO_NULL_DEVICE);
-          my_system ( command);
-          sprintf ( command, "%s -method %s -aln %s -tree %s -dmatrix %s -weightfile %s %s",method_4_msa_weights, action_list[1],aln_name, tree_name, dist_matrix_name,weight_name, TO_NULL_DEVICE); 
-          my_system ( command);
-          
-          (D1->A)->S=aln2seq (D1->A);
-          ((D1->A)->S)->W=read_seq_weight ( (D1->A)->name, (D1->A)->nseq,weight_name);    
-          vremove (weight_name);
-          vremove (aln_name);
-          vremove (tree_name);
-          vremove (dist_matrix_name);     
-        }
-       else if ( strm (action, "pavie_seq2random_seq"))
-        {
-          D1->S=pavie_seq2random_seq (D1->S, action_list[1]);
-          D1->A=seq2aln (D1->S,NULL,1);
-        }
-       else if ( strm ( action, "pavie_seq2noisy_seq"))
-        {
-          /*<amount of noise: 0-100> (<alp>)*/
-          
-          D1->S=pavie_seq2noisy_seq (D1->S, atoi(action_list[1]),ACTION(2));
-          D1->A=seq2aln (D1->S,NULL,1);
-        }
-       else if ( strm (action, "pavie_seq2pavie_mat"))
-        {
-
-          pavie_seq2trained_pavie_mat ( D1->S, (n_actions==2)?action_list[1]:NULL);
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "pavie_seq2pavie_aln"))
-        {
-
-          pavie_seq2pavie_aln ( D1->S, action_list[1], ACTION(2));
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "pavie_seq2pavie_dm"))
-        {
-           if (strstr (ACTION2(2,""), "_MSA_"))
-             D1->S=aln2seq_main(D1->A, KEEP_GAP);
-          
-                  
-          pavie_seq2pavie_aln ( D1->S, action_list[1],(n_actions==3)?action_list[2]:"_MATDIST_");
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action, "pavie_seq2pavie_msa"))
-        {
-          D1->A=pavie_seq2pavie_msa ( D1->S, action_list[1], (n_actions==3)?action_list[2]:NULL);
-        }
-       else if ( strm (action, "pavie_seq2pavie_tree"))
-        {
-          D1->T=pavie_seq2pavie_tree ( D1->S, action_list[1], (n_actions==3)?action_list[2]:NULL);
-        }
-       else if ( strm (action, "pavie_seq2pavie_sort"))
-        {
-          D1->A=pavie_seq2pavie_sort ( D1->S, action_list[1], (n_actions==3)?action_list[2]:NULL);
-        }
-      
-       else if ( strm (action, "aln2mat_diaa"))
-        {
-          aln2mat_diaa (D1->S);
-        }
-       else if ( strm (action, "aln2mat"))
-        {
-          aln2mat(D1->S);
-        }
-       
-       else if ( strm (action, "seq2latmat"))
-        {
-          seq2latmat ( D1->S, "stdout");
-          myexit (EXIT_SUCCESS);
-        }
-       else if ( strm (action , "rm_target_pdb"))
-        {
-          int i, j;
-          char *buf;
-          
-          for (i=0; i< (D1->A)->nseq; i++)
-            {
-              j=1;buf=(D1->A)->name[i];
-              while (buf[j]!='_' && buf[j-1]!='_' && buf[j]!='\0')j++;
-              buf[j]='\0';
-            }
-        }
-       else if ( strm ( action, "mat2cmp"))
-        {
-          double *r;
-          r=mat2cmp (D1->M, D2->M);
-          fprintf ( stdout, "\nMATRIX COMPARISON: R=%.3f R2=%.3f On %d pairs of values\n", (float)r[0], (float)r[1], (int)r[2]);
-          myexit (EXIT_SUCCESS);
-        }
-//Special modes
-       else if ( strm ( action, "overaln_list"))
-        {
-          float *re, tre=0,sn, tsn=0, sp, tsp=0;
-          int p1,p2,p3, t, f;
-          FILE *fp;
-          char fname [100];
-          Alignment **LA;
-          Alignment **LB;
-          
-          HERE ("F P1 P2 P3 T");
-
-          t=ATOI_ACTION(1);
-          f=ATOI_ACTION(2);
-          p1=ATOI_ACTION(3);
-          p2=ATOI_ACTION(4);
-          p3=ATOI_ACTION(5);
-          
-          
-          
-          LA=vcalloc ((D1->A)->nseq, sizeof (Alignment*));
-          LB=vcalloc ((D2->A)->nseq, sizeof (Alignment*));
-          for (a=0; a<(D1->A)->nseq; a++)
-            {
-               LA[a]=main_read_aln ((D1->A)->name[a], NULL);
-               LB[a]=main_read_aln ((D2->A)->name[a], NULL);
-            }
-       
-          for ( a=0; a<(D1->A)->nseq; a++)
-            {
-              Alignment *A, *B;
-              A=LA[a];
-              B=LB[a];
-              re=analyze_overaln (A, B, "_case_l_",t,f,p1,p2,p3);
-              fprintf (stdout, "\n%d: sn: %.2f sp: %.2f re: %.2f F: %d P: %d P2: %d T: %d",a, re[0],re[1],re[2],f, p1,p2,t);
-              tsn+=re[0];
-              tsp+=re[1];
-              tre+=re[2];
-              vfree(re);
-            }
-          fprintf (stdout, "\nTOT: sn: %.2f sp: %.2f re: %.2f F: %d P: %d P2: %d T: %d", tsn/(D1->A)->nseq,tsp/(D1->A)->nseq, tre/(D1->A)->nseq,f,p1,p2,t);
-          
-          myexit (0);
-        }
-       else if ( strm ( action, "overaln_list_scan"))
-        {
-          float *re, tre=0, tsn=0, tsp;
-          int p1,p2, p3, t, f;
-          FILE *fp;
-          char fname [100];
-          Alignment **LA;
-          Alignment **LB;
-          
-          if ( ACTION(1))sprintf ( fname, "%s", ACTION(1));
-          else sprintf ( fname, "scan_results.txt");
-          
-          fprintf ( stdout, "SCAN Results will be ouput in %s\n", fname);
-          
-          
-          LA=vcalloc ((D1->A)->nseq, sizeof (Alignment*));
-          LB=vcalloc ((D2->A)->nseq, sizeof (Alignment*));
-          for (a=0; a<(D1->A)->nseq; a++)
-            {
-               LA[a]=main_read_aln ((D1->A)->name[a], NULL);
-               LB[a]=main_read_aln ((D2->A)->name[a], NULL);
-            }
-          for (f=32; f<=40; f++)
-            {
-              for (p1=90; p1<=100; p1+=5)
-                {
-                  for ( t=1; t<=3; t++)
-                    {
-                      for (p2=0; p2<=40; p2+=5)
-                        {
-                          for (p3=0;p3<=0;p3+=5)
-                            {
-                              tre=tsn=tsp=0;
-                              for ( a=0; a<(D1->A)->nseq; a++)
-                                {
-                                  Alignment *A, *B;
-                                  A=LA[a];
-                                  B=LB[a];
-                                  re=analyze_overaln (A, B, "_case_l_",t,f,p1,p2,p3);
-                                  
-                                  tsn+=re[0];
-                                  tsp+=re[1];
-                                  tre+=re[2];
-                                  vfree (re);
-                                }
-                              fp=vfopen (fname, "a");
-                              fprintf (fp, "\nTOT: sn: %.2f sp: %.2f re: %.2f P: %d P2: %d P3: %d T: %d F: %d", tsn/(D1->A)->nseq,tsp/(D1->A)->nseq, tre/(D1->A)->nseq, p1,p2, p3,t,f);
-                              fprintf (stderr, "\nTOT: sn: %.2f sp: %.2f re: %.2f P: %d P2: %d P3: %d T: %d F: %d", tsn/(D1->A)->nseq,tsp/(D1->A)->nseq, tre/(D1->A)->nseq, p1,p2, p3,t,f);
-                              vfclose (fp);
-                            }
-                        }
-                    }
-                }
-            }
-          myexit (0);
-        }
-       else if ( strm ( action, "overaln"))//Evaluate the capacity to predict over-aligned regions
-        {
-          OveralnP *F;
-          F=vcalloc (1, sizeof (OveralnP));
-          //al1: ref
-          //al2: alignment
-          //ATOI(1): P (0-100)
-          //ATOI(2): T (0-9)
-          
-          float *r;
-          DST=vcalloc (1,sizeof(Sequence_data_struc));
-          DST->A=aln2gap_cache (D1->A,0);
-          lower_value=0;
-          upper_value=0;
-          D1->A=filter_aln_upper_lower (D1->A, DST->A, 0, 0);
-          
-          sprintf (F->mode, "%s", ((s=get_string_variable ("overaln_mode")))?s:"lower");
-          if (!strm (F->mode, "lower") && !strstr (F->mode, "unalign"))printf_exit (EXIT_FAILURE,stderr,"\nERROR: unknown overal_mode in overal output [%s] [FATAL:%s]", F->mode, PROGRAM);
-          
-          if (int_variable_isset ("overaln_threshold"))F->t=get_int_variable ("overaln_threshold");
-          if (int_variable_isset ("overaln_target"))F->f=get_int_variable ("overaln_target");
-          if (int_variable_isset ("overaln_P1"))F->f=get_int_variable ("overaln_P1");
-          if (int_variable_isset ("overaln_P1"))F->f=get_int_variable ("overaln_P2");
-          if (int_variable_isset ("overaln_P1"))F->f=get_int_variable ("overaln_P3");
-          if (int_variable_isset ("overaln_P1"))F->f=get_int_variable ("overaln_P4");//F P1 P2 P3 T;
-          
-          D2->A=aln2clean_pw_aln (D2->A, F);
-          r=aln2pred (D1->A, D2->A,"case_l_");
-          fprintf ( stdout, "sn %.2f sp %.2f re %.2f\n", r[0], r[1], r[2]);
-          myexit (0);
-        }
-       
-          
-//JM_START
-       else if ( strm ( action, "aln2hitMat"))
-        {
-               aln2hitMat(D1->A, ACTION(1));
-               myexit (EXIT_SUCCESS);
-        }
-//JM_END
-       
-       else
-        {
-          fprintf ( stderr, "\nWARNING: ACTION %s UNKNOWN and IGNORED\n", action);
-        }
-     
-     }
-
-
-void aln2mat_diaa (Sequence *S)
-{
-  int a, aa1, aa2, aa3, aa4;
-  int s1, s2, p;
-  Alignment *A;
-  
-  int ****m;
-  int **c;
-  int naa=0;
-  int count=0;
-  double Delta=0.00001;
-  int *alp;
-  int tot,u;
-  double observed, expected, f_diaa1, f_diaa2, v;
-  
-
-  alp=vcalloc (256, sizeof (int));
-  for (a=0; a<26; a++)alp[a+'a']=1;
-  alp['b']=0;
-  alp['j']=0;
-  alp['o']=0;
-  alp['u']=0;
-  alp['x']=0;
-  alp['z']=0;
-
-  m=declare_arrayN (4,sizeof (int),26,26,26,26);
-  c=declare_arrayN  (2,sizeof (int),26,26);
-  
-  for ( a=0; a< S->nseq; a++)
-    {
-      fprintf ( stderr, "%s\n", S->name[a]);
-      A=main_read_aln (S->name[a],NULL);
-      for (s1=0; s1<A->nseq; s1++)lower_string (A->seq_al[s1]);
-      
-      for ( s1=0; s1<A->nseq-1; s1++)
-       for (s2=s1+1; s2<A->nseq; s2++)
-         {
-           for (p=0; p<A->len_aln-1; p++)
-             {
-               
-               u =alp[aa1=A->seq_al[s1][p]];
-               u+=alp[aa2=A->seq_al[s1][p+1]];
-               u+=alp[aa3=A->seq_al[s2][p]];
-               u+=alp[aa4=A->seq_al[s2][p+1]];
-       
-               if ( u==4)
-                 {
-                   aa1-='a';aa2-='a';aa3-='a'; aa4-='a';
-                   
-                   c[aa1][aa2]++;
-                   c[aa3][aa4]++;
-                   m[aa1][aa2][aa3][aa4]++;
-                   count+=2;
-                 }
-             }
-         }
-      free_aln (A);
-    }
-  fprintf ( stdout, "# DIAA_MATRIX_FORMAT_01\n");
-  naa=26;
-  for (aa1=0; aa1<naa; aa1++)
-    for (aa2=0; aa2<naa; aa2++)
-      for (aa3=0; aa3<naa; aa3++)
-       for (aa4=0; aa4<naa;aa4++) 
-         {
-           u =alp[aa1+'a'];
-           u+=alp[aa2+'a'];
-           u+=alp[aa3+'a'];
-           u+=alp[aa4+'a'];
-           
-           if ( u==4)
-             {
-               tot=m[aa1][aa2][aa3][aa4]+m[aa3][aa4][aa1][aa2];
-               observed=((double)tot)/(double)((double)count/(double)2);
-               f_diaa1=(double)c[aa1][aa2]/(double)count;
-               f_diaa2=(double)c[aa3][aa4]/(double)count;
-               
-               expected=f_diaa1*f_diaa2;
-               if (expected<Delta)v=0;
-               else if (observed<Delta)v=-100;
-               else 
-                 {
-                   v=log(observed/expected)*10;
-                 }
-           // if (tot>0)fprintf ( stdout, "TEST C=%d expected=%.4f observed=%.4f v=%.4f [%d %d %d][%d] tot=%d\n", count, (float)expected, (float)observed, (float) v, c[aa1][aa2], c[aa3][aa4], count, m[aa1][aa2][aa3][aa4], tot);
-               fprintf ( stdout, "%c%c %c%c %d %d\n", aa1+'a', aa2+'a', aa3+'a', aa4+'a', (int)v, m[aa1][aa2][aa3][aa4]+ m[aa3][aa4][aa1][aa2]);
-             }
-         }
-  myexit (EXIT_SUCCESS);
-}
-void aln2mat (Sequence *S)
-{
-  int a, aa1, aa3;
-  int s1, s2, p;
-  Alignment *A;
-  int **mat;
-  int **m;
-  int *c;
-  int naa=0;
-  int count=0;
-  double Delta=0.00001;
-  int *alp;
-  int tot,u;
-  double observed, expected, f_diaa1, f_diaa2, v;
-  char *balp;
-
-  balp=vcalloc ( 256, sizeof (char));
-  for (a=0; a<strlen (BLAST_AA_ALPHABET); a++)balp[BLAST_AA_ALPHABET[a]]=a;
-  
-  mat=declare_int (256, 256);
-  alp=vcalloc (256, sizeof (int));
-  for (a=0; a<26; a++)alp[a+'a']=1;
-  alp['b']=0;
-  alp['j']=0;
-  alp['o']=0;
-  alp['u']=0;
-  alp['x']=0;
-  alp['z']=0;
-
-  m=declare_arrayN (2,sizeof (int),26,26);
-  c=declare_arrayN  (1,sizeof (int),26);
-  
-  for ( a=0; a< S->nseq; a++)
-    {
-      fprintf ( stderr, "%s\n", S->name[a]);
-      A=main_read_aln (S->name[a],NULL);
-      for (s1=0; s1<A->nseq; s1++)lower_string (A->seq_al[s1]);
-      
-      for ( s1=0; s1<A->nseq-1; s1++)
-       for (s2=s1+1; s2<A->nseq; s2++)
-         {
-           for (p=0; p<A->len_aln-1; p++)
-             {
-               
-               u =alp[aa1=A->seq_al[s1][p]];
-               u+=alp[aa3=A->seq_al[s2][p]];
-               
-               if ( u==2)
-                 {
-                   aa1-='a';aa3-='a';
-                   
-                   c[aa1]++;
-                   c[aa3]++;
-                   m[aa1][aa3]++;
-                   count+=2;
-                 }
-             }
-         }
-      free_aln (A);
-    }
-  fprintf ( stdout, "# MONOAA_MATRIX_FORMAT_01\n");
-  naa=26;
-  for (aa1=0; aa1<naa; aa1++)
-      for (aa3=0; aa3<naa; aa3++)
-         {
-           u =alp[aa1+'a'];
-           u+=alp[aa3+'a'];
-           
-           if ( u==2)
-             {
-               tot=m[aa1][aa3]+m[aa3][aa1];
-               observed=((double)tot)/(double)((double)count/(double)2);
-               f_diaa1=(double)c[aa1]/(double)count;
-               f_diaa2=(double)c[aa3]/(double)count;
-               
-               expected=f_diaa1*f_diaa2;
-               if (expected<Delta)v=0;
-               else if (observed<Delta)v=-100;
-               else 
-                 {
-                   v=log(observed/expected)/(log(2)/2);
-                 }
-           // if (tot>0)fprintf ( stdout, "TEST C=%d expected=%.4f observed=%.4f v=%.4f [%d %d %d][%d] tot=%d\n", count, (float)expected, (float)observed, (float) v, c[aa1][aa2], c[aa3][aa4], count, m[aa1][aa2][aa3][aa4], tot);
-               //fprintf ( stdout, "%c %c %d %d\n", aa1+'A', aa3+'A', (int)v, m[aa1][aa3]+ m[aa3][aa1]);
-               mat[aa1][aa3]=(int)v;
-             }
-         }
-  output_blast_mat (mat, "stdout");
-  myexit (EXIT_SUCCESS);
-}          
-       
-
-int **seq2latmat ( Sequence *S, char *fname)
-{
-  int a, b, r0, r1;
-  char *aa;
-  int naa;
-  int *count, tot;
-  int **mat;
-  double observed, expected;
-  FILE *fp;
-
-  fp=vfopen (fname, "w");
-  
-  count=vcalloc ( 256, sizeof (int));
-  mat=declare_int (256, 256);
-  
-  naa=strlen ( BLAST_AA_ALPHABET);
-  aa=vcalloc ( naa+2, sizeof (char));
-  sprintf ( aa, "%s", BLAST_AA_ALPHABET);
-  lower_string (aa);
-  
-  for ( tot=0,a=0; a< S->nseq; a++)
-    {
-      ungap (S->seq[a]);
-      for ( b=1; b<S->len[a]; b++)
-       {
-         r0=tolower(S->seq[a][b-1]);
-         r1=tolower(S->seq[a][b]);
-         
-         mat[r0][r1]++;
-         //count[r0]++;
-         count[r1]++;
-         tot++;
-       }
-    }
-  for ( a=0; a< naa; a++)
-    for (b=0; b< naa; b++)
-      {
-       if ( aa[a]=='*' || aa[b]=='*');
-       else
-         {
-           expected=((double)count[(int)aa[a]]/(double)tot)* ((double)count[(int)aa[b]]/(double)tot)*(double)tot;
-           observed=((double)mat[(int)aa[a]][(int)aa[b]]);
-       
-           /*
-             fprintf ( stderr, "\n%c=%d %c=%d Tot=%d Obs=%d Exp=%d\n", aa[a],count[aa[a]], aa[b],count[aa[b]],tot, mat[aa[a]][aa[b]],(int)expected);  
-             fprintf ( stderr, "\n%d", mat[aa[a]][aa[b]]);
-             fprintf ( stderr, "\n%d", mat[aa[a]][aa[b]]);
-           */
-           mat[(int)aa[a]][(int)aa[b]]=(expected==0 || observed==0)?0:((int)10*log((observed/expected)));
-         }
-      }
-  fprintf (fp,"# BLAST_MATRIX FORMAT\n#ALPHABET=%s\n#TRANSITION MATRIX TRAINED ON %d Sequence\n#", BLAST_AA_ALPHABET, S->nseq);
-  for (a=0; a< naa; a++)fprintf ( fp, "%3c ", toupper(aa[a]));
-  fprintf (fp,"\n");
-  for (a=0; a< naa; a++)
-    {
-      
-      fprintf (fp, "%c", toupper(aa[a]));
-      for ( b=0; b< naa; b++)
-       {
-         fprintf (fp, "%3d ", mat[(int)aa[a]][(int)aa[b]]);
-       }
-      fprintf ( fp, "\n");
-    }
-  vfclose (fp);
-  vfree (count);
-  vfree (aa);
-  
-  return mat;
-}
-double* mat2cmp ( int **mat1, int **mat2)
-{
-  int a, b, n, x, y;
-  double **list, *r;
-  if ( !mat1 || !mat2)
-    {
-      fprintf ( stderr, "\nERROR: mat2cmp needs two matrices [FATAL:%s]", PROGRAM);
-      myexit (EXIT_FAILURE);
-    }
-  
-  for (n=0, a=0; a< 256; a++)
-    for ( b=0; b<256; b++)
-      {
-       x=mat1[a][b];
-       y=mat2[a][b];
-       if ( x|| y)n++;
-      }
-  if ( n==0) return 0;
-  list=declare_double (n, 2);
-  
-  for (n=0, a=0; a<256; a++)
-    for ( b=0; b<256; b++)
-      {
-       x=mat1[a][b];
-       y=mat2[a][b];
-       if ( x || y)
-         {
-           list[n][0]=x;
-           list[n][1]=y;
-           n++;
-         }
-      }
-  r=return_r (list, n);
-  free_double(list, -1);
-  return r;
-}
-   
-int ** read_blast_matrix ( char *mat_name)
-        {
-       FILE *fp;
-       int n_aa,aa1, aa2;
-       int a, b, c;
-       int **matrix;
-       int value;
-       char sbuf[VERY_LONG_STRING];
-       char buf[2];
-       char alp[257];
-
-       matrix=declare_int (256,256);
-       vfree ( matrix[30]);
-       matrix[30]=vcalloc(10000, sizeof (int));
-       fp=vfopen ( mat_name, "r");
-       while ( (c=fgetc(fp))=='#' || isspace(c) )
-         {
-           char *p;
-           fgets ( sbuf, VERY_LONG_STRING, fp);
-           if ( (p=strstr (sbuf, "ALPHABET")))
-             sscanf (p, "ALPHABET=%s", alp);
-       }
-       ungetc(c, fp);
-       lower_string (alp);
-       n_aa=strlen (alp);
-
-       for ( a=0; a< n_aa; a++)
-           {
-           fscanf ( fp, "%s ", buf);
-
-           aa1=tolower(buf[0]);
-           
-           if ( aa1!=alp[a])
-               {
-               fprintf ( stderr, "\nParsing_error when reading blast_matrix %s:\n%c %c",mat_name, aa1,alp[a]);
-               fprintf ( stderr, "\n%c ", fgetc(fp));
-               myexit (EXIT_FAILURE);
-               }
-           for ( b=0; b<n_aa; b++)
-               {
-               aa2=tolower ((char) alp[b]);
-               fscanf ( fp, "%d ", &value);
-               if (is_gap(aa1) || is_gap(aa2))
-                 {
-                   int c1, c2;
-                   c1=(is_gap(aa1))?GAP_CODE:aa1;
-                   c2=(is_gap(aa2))?GAP_CODE:aa2;
-                   if ( c1==GAP_CODE && c2==GAP_CODE)
-                     matrix[c1][c2]=value;
-                   else if ( c1==GAP_CODE)
-                     {
-                       matrix[c1][tolower(c2)]=value;
-                       matrix[c1][toupper(c2)]=value;
-                     }
-                   else
-                     {
-                       matrix[tolower(c1)][c2]=value;
-                       matrix[toupper(c1)][c2]=value;
-                     }
-                 }
-               else if ( aa1!='*' && aa2!='*')
-                 {
-                   matrix[tolower(aa1)-'A'][tolower(aa2)-'A']=value;
-                   matrix[toupper(aa1)-'A'][toupper(aa2)-'A']=value;
-                   matrix[tolower(aa1)-'A'][toupper(aa2)-'A']=value;
-                   matrix[toupper(aa1)-'A'][tolower(aa2)-'A']=value;
-                 }
-               }
-           fscanf(fp, "\n");
-           }
-       fclose (fp);
-
-       return matrix;
-       }
-
-int output_blast_mat (int **mat, char *fname)
-{
-  return output_mat(mat, fname, BLAST_AA_ALPHABET, 'a');
-  
-}
-int output_header_mat (int **mat, char *fname, char *alp)
-{
-  int a, b,l;
-  FILE *fp;
-  int naa;
-
-  char raa[]="ABCDEFGHIKLMNPQRSTVWXYZ";
-  char *aa;
-  
-  naa=strlen (raa);
-  aa=vcalloc ( naa+2, sizeof (char));
-  sprintf ( aa, "%s",raa);
-  lower_string (aa);
-  
-  fp=vfopen (fname, "w");
-  fprintf ( fp, "int new_mat[]={\n");
-  l=strlen (aa);
-  for (a=0; a<naa; a++)
-    {
-      for (b=0; b<=a; b++)
-       {
-         fprintf (fp, "%3d, ", mat[aa[a]-'a'][aa[b]-'a']);
-       }
-      fprintf (fp, "\n");
-    }
-  fprintf ( fp, "}");
-  vfclose (fp);
-}
-int output_mat (int **mat, char *fname, char *alp, int offset)
-{
-  char *aa;
-  int a,b, naa;
-  FILE *fp;
-
-
-  
-  naa=strlen (alp);
-  aa=vcalloc ( naa+2, sizeof (char));
-  sprintf ( aa, "%s",alp);
-  lower_string (aa);
-  if (!(fp=vfopen (fname, "w")))return 0;
-  fprintf (fp,"# BLAST_MATRIX FORMAT\n#ALPHABET=%s\n  ",alp);
-  for (a=0; a< naa; a++)fprintf ( fp, "%5c ", toupper(aa[a]));
-  fprintf (fp,"\n");
-  for (a=0; a< naa; a++)
-    {
-      
-      fprintf (fp, "%c", toupper(aa[a]));
-      for ( b=0; b< naa; b++)
-       {
-         if (aa[a]!='*' && aa[b]!='*')
-           fprintf (fp, " %5d", mat[aa[a]-offset][aa[b]-offset]);
-         else 
-           fprintf (fp, " %5d", 0);
-       }
-      fprintf ( fp, "\n");
-    }
-  vfree (aa);
-  vfclose (fp);
-  return 1;
-}              
-
-void output_pavie_mat (int **mat, char *fname, double gep, char *alp)
-{
-  int n, a, b;
-  FILE *fp;
-  
-  n=strlen (alp);
-  fp=vfopen (fname, "w");
-  fprintf (fp,"# PAVIE_MATRIX FORMAT\n#ALPHABET=%s\n",alp);
-  
-  for(a=0; a< n; a++)
-     {
-       for ( b=a; b<n; b++)
-       {         
-         fprintf (fp, "%c %c %.3f\n", toupper(alp[a]), toupper(alp[b]), (float)mat[alp[a]-'A'][alp[b]-'A']/PAVIE_MAT_FACTOR);
-       }
-     }
-   if ( gep!=UNDEFINED)fprintf ( fp, "- - %.3f\n", gep/PAVIE_MAT_FACTOR);
-   vfclose(fp);
- }
-
-int ** read_pavie_matrix ( char *mat_name)
-        {
-       FILE *fp;
-       int c, n_aa;
-       char aa1, aa2;
-       float v;
-       int **matrix;
-       char sbuf[VERY_LONG_STRING];
-       char alp[257];
-       int gep=UNDEFINED;
-       
-       matrix=declare_int (256,256);
-       
-       
-       fp=vfopen ( mat_name, "r");
-       while ( (c=fgetc(fp))=='#' || isspace(c) )
-         {
-           fgets ( sbuf, VERY_LONG_STRING, fp);
-           if ( sscanf (sbuf, "ALPHABET=%s", alp)==1);
-         }
-       ungetc(c, fp);
-       
-       n_aa=strlen (alp);
-       while ( fgets ( sbuf, VERY_LONG_STRING, fp)!=NULL)
-           {
-             aa1=aa2='Z';
-             if (sscanf (sbuf, "%c %c %f",&aa1, &aa2, &v)==3)
-               {
-                 v*=PAVIE_MAT_FACTOR;
-                 if (aa1=='-' && aa2=='-')gep=v;
-                 else
-                   {
-                     matrix[tolower(aa1)-'A'][tolower(aa2)-'A']=v;
-                     matrix[toupper(aa1)-'A'][toupper(aa2)-'A']=v;
-                     matrix[tolower(aa1)-'A'][toupper(aa2)-'A']=v;
-                     matrix[toupper(aa1)-'A'][tolower(aa2)-'A']=v;
-                     
-                     matrix[tolower(aa2)-'A'][tolower(aa1)-'A']=v;
-                     matrix[toupper(aa2)-'A'][toupper(aa1)-'A']=v;
-                     matrix[tolower(aa2)-'A'][toupper(aa1)-'A']=v;
-                     matrix[toupper(aa2)-'A'][tolower(aa1)-'A']=v;
-                   }             
-             }
-           }
-       if ( gep!=UNDEFINED)
-         {
-           int a;
-           for (a=0; a< n_aa; a++)
-             {
-               if (!matrix[tolower(alp[a])-'A'][GAP_CODE])
-                 {
-                   matrix[tolower(alp[a])-'A'][GAP_CODE]=gep;
-                   matrix[toupper(alp[a])-'A'][GAP_CODE]=gep;
-                 }
-             }
-         }
-       vfclose (fp);
-       return matrix;
-       }
-
-Sequence *seq2year ( Sequence *S, int modulo)
-{
-  int a, b, y;
-  int first;
-  char *s;
-  char new_channel[100];
-  
-  sprintf( new_channel, "_agechannel%d",modulo);
-  
-  for ( a=0; a<S->nseq; a++)
-    {
-      if (S->seq_comment[a] && (s=strstr(S->seq_comment[a], "_FIRSTYEAR")))
-       {
-         sscanf (s, "_FIRSTYEAR%d_", &first);
-       }      
-      else first=1;
-     
-      for ( y=first,b=0; b<S->len[a]; b++)
-       {
-         if ( !is_gap(S->seq[a][b]))
-           {
-             S->seq[a][b]='a'+((y/modulo))%10;
-             y++;
-           }
-       }
-      if ( (s=strstr ( S->name[a], "_agechannel")))
-          {
-            sprintf ( s, "%s", new_channel);
-          }
-      else strcat (S->name[a], new_channel);
-    }
-  return S;
-}
-
-Sequence* output_n_pavie_age_channel (Sequence *S, char *name, int n)
-{
-  int x, a;
-  if (!n)n=2;
-  
-
-  for ( x=1,a=0; a< n; a++, x*=10)
-    {
-      S=output_pavie_age_channel(S, name,x);
-    }
-return S;
-}
-  
-
-
-
-Sequence* output_pavie_age_channel (Sequence *S, char *name, int modulo)
-  {
-    Alignment *A;
-    FILE *fp;
-    static int display;
-    char mat_list_name[100];
-    char seq_list[1000];
-    char mat_name[1000];
-    char *tmp;
-    
-    sprintf ( mat_list_name, "%s_pavie_age_matrix.mat_list", name);
-    sprintf (seq_list, "%s_age_channel.fasta",name);
-    
-    if ( display==0 )
-      {
-       if (check_file_exists(seq_list))vremove (seq_list);
-       if (check_file_exists(mat_list_name))vremove (mat_list_name);
-      }
-    sprintf (mat_name, "%s_age_mat_mod%d.mat",name, modulo);
-    output_age_matrix ( mat_name, modulo);
-      
-    fp=vfopen  ( mat_list_name,"a"); 
-    fprintf ( fp, "%s\n", mat_name);
-    vfclose ( fp);
-    
-    S=seq2year (S,modulo);
-    A=seq2aln (S, NULL, KEEP_GAP);
-    output_fasta_seq (tmp=vtmpnam (NULL),A);
-    file_cat ( tmp, seq_list);
-        
-    if ( display==0)
-      {
-       display_output_filename ( stdout, "AGE_MAT_LIST", "MAT_LIST", mat_list_name, CHECK);
-       display_output_filename ( stdout, "AGE_SEQ", "FASTA", seq_list, CHECK);
-       display=1;
-      }
-    fprintf ( stderr, "\nModulo:%d years", modulo); 
-    fprintf ( stderr, "\n");
-    free_aln (A);
-    return S;
-  }
-//
-// Name MAnipulation
-//
-
-Alignment *clean_aln (Alignment *A)
-{
-  if ( A)
-    {
-      A->seq_comment=clean_string (A->nseq, A->seq_comment);
-      A->aln_comment=clean_string (A->nseq, A->aln_comment);
-      A->name=translate_names(A->nseq, A->name);
-      (A->S)=clean_sequence ((A->S));
-    }
-  return A;
-}
-Sequence *clean_sequence ( Sequence *S)
-{
-  if ( !S) return S;
-  
-  S->seq_comment=clean_string (S->nseq, S->seq_comment);
-  S->name=translate_names(S->nseq, S->name);
-  return S;
-}
-char ** translate_names (int n, char **name)
-{
-  int a;
-  for ( a=0; a<n; a++)
-    name[a]=translate_name(name[a]);
-  return name;
-}
-char * translate_name ( char *name)
-       {
-
-       int len;
-       int a;
-       char buf[1000];
-       
-       len=strlen (name);
-               
-       //if ( name[0]=='\'')return name;
-       
-       for ( a=0; a<len; a++)
-               {
-               if ( isspace(name[a]))name[a]='\0';
-               else if (strchr (";(),:#><'�", name[a]))name[a]='_';
-               
-               }
-       sprintf (buf,"%s",decode_name (name, DECODE));
-       if ( strlen (buf)>read_array_size_new ((char *)name))
-         {
-           name=vrealloc (name, sizeof (char)*(strlen (buf)+1));
-         }
-       sprintf (name, "%s", buf);
-       
-       return name;
-       }
-char *decode_name (char *name, int mode)
-{
-  static char ***name_list;
-  static int n;
-  static char tag[100];
-  int a;
-  
-  if (mode==CLEAN)
-    {
-      for (a=0; a<n; a++)
-       {
-         vfree (name_list[a][0]);
-         vfree (name_list[a][1]);
-         vfree (name_list[a]);
-       }
-      vfree (name_list);
-      tag[0]='\0';
-    }
-  
-  //spacial modes
-  if ( mode == CODELIST)
-    {
-      char *file;
-      file=vtmpnam (NULL);
-      for (a=0; a< n; a++)
-       printf_file(file, "a", "#CODE: %s <=> %s\n", name_list[a][0], name_list[a][1]);
-      return file;
-    }
-  if (mode ==DECODE && name_list==NULL)return name;
-  if ( name==NULL) return name;
-  
-        
-  
-  if (!tag[0])
-    {
-      vsrand (0);
-      sprintf ( tag, "TCTAG_%d",rand ()%100000);
-    }
-  
-  if ( mode==CODE)
-    {
-      for (a=0; a< n; a++)
-       if ( strm (name, name_list[a][0]))return name_list[a][1];
-     
-
-      name_list=realloc (name_list, sizeof (char**)*(n+1));
-      name_list[n]=vcalloc (2, sizeof (char*));
-      name_list[n][0]=vcalloc (strlen (name)+1, sizeof (char));
-      name_list[n][1]=vcalloc (100, sizeof (char));
-      sprintf ( name_list[n][0], "%s", name);
-      sprintf ( name_list[n][1], "%s_%d", tag,n+1);
-      return name_list[n++][1];
-    }
-  else if ( mode ==DECODE)
-    {
-      char *p;
-      int i;
-      if ( !(p=after_strstr (name, tag)))return name;
-      else 
-       {
-         sscanf (p, "_%d", &i);
-         return name_list[i-1][0];
-       }
-    }
-  else 
-    {
-      printf_exit (EXIT_FAILURE, stderr,"Unknown Mode for Decode_name [FATAL:%s]", PROGRAM);
-    }
-  return NULL;
-}
-      
-
-FILE * display_sequences_names (Sequence *S, FILE *fp, int check_pdb_status, int print_templates)
-        {
-           int a;
-           int max_len;
-           char *r;
-           
-           if ( !S)
-              {
-                  fprintf (fp,"\nERROR: NO SEQUENCE READ [FATAL:%s]\n", PROGRAM); myexit (EXIT_FAILURE);
-              }
-           for ( a=0, max_len=0; a< S->nseq; a++)max_len=MAX(max_len, strlen (S->name[a]));
-           fprintf ( fp, "\nINPUT SEQUENCES: %d SEQUENCES  [%s]", S->nseq,(S->type)?S->type:"Unknown type");
-           for ( a=0; a< S->nseq; a++)
-               {
-                 fprintf (fp, "\n  Input File %-*s Seq %-*s Length %4d type %s",max_len,S->file[a], max_len,S->name[a],(int)strlen ( S->seq[a]), S->type);
-                   if (check_pdb_status)
-                     {
-                       if ((r=seq_is_pdb_struc (S, a)))fprintf (fp, " Struct Yes PDBID %s", get_pdb_id(r));
-                       else fprintf (fp, " Struct No");
-                       /*
-                       if (is_pdb_struc (S->name[a])||is_pdb_struc (S->file[a]) )fprintf (fp, " Struct Yes");
-                       else fprintf (fp, " Struct No");
-                       */
-                     }
-                   else fprintf (fp, " Struct Unchecked");
-                   if ( print_templates)fp=display_sequence_templates (S, a, fp);
-                   
-
-               }
-           fprintf ( fp, "\n");
-           return fp;
-           
-       }
-Sequence *add_file2file_list (char *name, Sequence *S)
-{
-  
-  if (!S) S=declare_sequence (1,1,10);
-  else S=realloc_sequence   (S,S->nseq+1,0);S->nseq=0;
-  sprintf ( S->name[S->nseq++], "%s", name);
-  return S;
-
-}
-#ifdef DO_PHECOMP
-int parse_phecomp_data (char *in, char *out)
-{
-  static char *buffer;
-  in=quick_find_token_in_file (in, "[EXPERIMENT HEADER]");
-  while (fgets (buffer,fp,MAX_LINE_LENGTH));
-}
-FILE * quick_find_token_in_file  (FILE *fp, char *token)
-{
-  //returns fp pointing to the begining of the line FOLLOWING the line containing token 
-  static char *buffer;
-  if (!line) line=vcalloc (MAX_LINE_LENGTH+1, sizeof (char)); 
-  while (fgets (buffer,MAX_LINE_LENGTH, fp)!=NULL)
-    if (strstr (buffer,token))return fp;
-  vfclose (fp);
-  return NULL;
-}
-
-int * file2cage (char *file, int cage)
-{
-  
-
-
-
-
-
-
-
-
-
-#endif
-/******************************COPYRIGHT NOTICE*******************************/
-/*© Centro de Regulacio Genomica */
-/*and */
-/*Cedric Notredame */
-/*Fri Feb 18 08:27:45 CET 2011 - Revision 596. */
-/*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*******************************/