ma . Reset_From_Votes (s, 5, error_rate, vote, changed);
ma . Reset_From_Votes (s, offset_delta, error_rate, vote, changed);
void  Multi_Align    (vector <char *> & s, vector <int> & offset, int offset_delta,     double error_rate, Gapped_Multi_Alignment_t & gma,     vector <int> * ref)//  Create multialignment in  gma  of strings  s  each of which has//  a nominal offset from its predecessor of  offset .   offset_delta  is//  the number of positions by which the offset is allowed to vary in//  either direction.   error_rate  is the maximum expected error rate//  in alignments between strings.  It should be twice the expected error//  rate to the real reference string to allow for independent errors//  in separate strings.  The value of  offset [0]  must be zero.//  If  ref  isn't  NULL  then make its values be the subscripts of//  the original locations of the entries in  s  in case they are//  shifted  {   Multi_Alignment_t  ma;   vector <Vote_t>  vote;   bool  changed;   int  ct, n;   n = s . size ();   if  (n == 0)       Clean_Exit ("ERROR:  Multi_Align called with no strings", __FILE__, __LINE__);   if  (n != int (offset . size ()))       {        sprintf (Clean_Exit_Msg_Line,            "ERROR:  Multi_Align called with %d strings and %d offsets",            n, int (offset . size ()));        Clean_Exit (Clean_Exit_Msg_Line, __FILE__, __LINE__);       }   if  (offset [0] != 0)       {        sprintf (Clean_Exit_Msg_Line,            "ERROR:  Multi_Align called with non-zero  offset [0] = %d",            offset [0]);        Clean_Exit (Clean_Exit_Msg_Line, __FILE__, __LINE__);       }   Sort_Strings_And_Offsets (s, offset, ref);   ma . Set_Initial_Consensus (s, offset, offset_delta, error_rate, vote);   ct = 0;   do     {      ma . Reset_From_Votes (s, 5, error_rate, vote, changed);      ct ++;     }  while  (ct < 3 && changed);   if  (Verbose > 3)       ma . Print_Alignments_To_Consensus (stderr, s);   gma . Convert_From (ma);   gma . Sort (s, ref);   return;  }