int  len, qlen; int  a, b;
int  qlen;
static void  Get_Strings_And_Lengths    (vector <char *> & s, vector <char *> & q, vector <int> & str_len,     vector <char *> & tag, const Celera_Message_t & msg,     ReadBank_t & read_bank, const vector <ID_Pair_t> & map,     const vector <Unitig_Ref_t> & uni_list)//  Populate  s  with reads for the contig in  msg  with reads coming//  from  read_bank , which must already be opened.  Put the corresponding//  quality-value strings for the reads into  q , put the lengths of//  the reads into  str_len , and put an identifying tag for//  each string in  tag .  Use  map  to convert uids//  (which is what's in the CCO messages) to iids (which is what's in//  the read bank).  Get surrogate unitig sequences from  uni_list .  {   const vector <Celera_MPS_Sub_Msg_t> &  frgs = msg . getMPSList ();   const vector <Celera_UPS_Sub_Msg_t> &  unis = msg . getUPSList ();   vector <int>  id_list;   Read_t  read;   Ordered_Range_t  position;   int  i, j, n;   n = s . size ();   for  (i = 0;  i < n;  i ++)     free (s [i]);   s . clear ();   n = q . size ();   for  (i = 0;  i < n;  i ++)     free (q [i]);   q . clear ();   n = tag . size ();   for  (i = 0;  i < n;  i ++)     free (tag [i]);   tag . clear ();   str_len . clear ();   n = msg . getNumFrags ();   for  (i = 0;  i < n;  i ++)     {      char  * tmp;      char  tag_buff [100];      string  seq;      string  qual;      Range_t  clear;      int  iid, uid;      int  len, qlen;      int  a, b;      position = frgs [i] . getPosition ();      a = position . getStart ();      b = position . getEnd ();            uid = frgs [i] . getId ();      iid = Lookup (uid, map);      read = read_bank . fetch (iid);      clear = read . getClearRange ();      if  (Verbose > 2)          read . Print (cerr);      seq = read . getSeqString (clear);      qual = read . getQualString (clear);      if  (b < a)          {           Reverse_Complement (seq);           reverse (qual . begin (), qual . end ());          }      len = seq . length ();      tmp = strdup (seq . c_str ());      for  (j = 0;  j < len;  j ++)        tmp [j] = tolower (tmp [j]);      s . push_back (tmp);      qlen = qual . length ();      if  (len != qlen)          {           sprintf (Clean_Exit_Msg_Line,                "ERROR:  Sequence length (%d) != quality length (%d) for read %d",                len, qlen, uid);           Clean_Exit (Clean_Exit_Msg_Line, __FILE__, __LINE__);          }      tmp = strdup (qual . c_str ());      q . push_back (tmp);      str_len . push_back (len);      sprintf (tag_buff, "r%d", uid);      tag . push_back (strdup (tag_buff));     }   n = msg . getNumUnitigs ();   printf ("Num unitigs = %d\n", n);   for  (i = 0;  i < n;  i ++)     {      Celera_Unitig_Type_t  u_type;      int  uid;      uid = unis [i] . getId ();      u_type = unis [i] . getUnitigType ();      printf ("Unitig %8d  %c\n", uid, Convert_Char (u_type));     }   return;  }