text: /* rcvs - Compare riken noncoding vs. nonspliced. */
  #include "common.h"
  #include "linefile.h"
  #include "hash.h"
  #include "options.h"
  #include "jksql.h"
  
  static char const rcsid[] = "$Id: rcvs.c,v 1.3 2003/05/06 07:22:31 kate Exp $";
  
  void usage()
  /* Explain usage and exit. */
  {
  errAbort(
    "rcvs - Compare riken noncoding vs. nonspliced\n"
    "usage:\n"
    "   rcvs TUinfo_for_fig2.txt tu_fantom2cluster.txt\n"
    "options:\n"
    "   -xxx=XXX\n"
    );
  }
  
  void rcvs(char *codingTable, char *clusterTable)
  /* rcvs - Compare riken noncoding vs. nonspliced. */
  {
  struct hash *idHash = newHash(16); // Key id1, val id2
  struct hash *nonCodingHash = newHash(16);  // Key clusterId, value 
  struct hash *splicedHash = newHash(16);  // Key id2, present if spliced
  struct sqlConnection *conn = sqlConnect("mgsc");
  struct sqlResult *sr;
  char **row;
  char *words[16];
  int wordCount;
  struct lineFile *lf;
  int codingSpliced = 0;
  int noncodingSpliced = 0;
  int codingNonspliced = 0;
  int noncodingNonspliced = 0;
  
  /* Read id's into hash */
  sr = sqlGetResult(conn, "select id1,id2 from rikenIds");
  while ((row = sqlNextRow(sr)) != NULL)
      hashAdd(idHash, row[0], cloneString(row[1]));
  sqlFreeResult(&sr);
  
  /* Read spliced into hash */
  sr = sqlGetResult(conn,
  	"select name from rikenOrientInfo where intronOrientation != 0");
  while ((row = sqlNextRow(sr)) != NULL)
      hashAdd(splicedHash, row[0], NULL);
  sqlFreeResult(&sr);
  
  /* Read noncoding clusters into hash */
  lf = lineFileOpen(codingTable, TRUE);
  while (lineFileNextRow(lf, words, 2))
      {
      if (sameString(words[1], "NoPProt"))
          hashAdd(nonCodingHash, words[0], NULL);
      }
  lineFileClose(&lf);
  
  /* Stream through cluster table counting and correlating. */
  lf = lineFileOpen(clusterTable, TRUE);
  while (lineFileNextRow(lf, words, 2))
      {
      char *cluster = words[0];
      char *id1 = words[1];
      char *id2 = hashMustFindVal(idHash, id1);
      if (hashLookup(nonCodingHash, cluster))
          {
  	if (hashLookup(splicedHash, id2))
  	    ++noncodingSpliced;
  	else
  	    ++noncodingNonspliced;
  	}
      else
          {
  	if (hashLookup(splicedHash, id2))
  	    ++codingSpliced;
  	else
  	    ++codingNonspliced;
  	}
      }
  printf("noncodingNonspliced %d\n", noncodingNonspliced);
  printf("noncodingSpliced %d\n", noncodingSpliced);
  printf("codingNonspliced %d\n", codingNonspliced);
  printf("codingSpliced %d\n", codingSpliced);
  printf("total %d\n", noncodingNonspliced + noncodingSpliced + codingNonspliced + codingSpliced);
  }
  
  int main(int argc, char *argv[])
  /* Process command line. */
  {
  optionHash(&argc, argv);
  if (argc != 3)
      usage();
  rcvs(argv[1], argv[2]);
  return 0;
  }
  