247e6b97ca054df01068657d2ffc84d1a48c90ac
aamp
  Sun Apr 3 08:56:50 2011 -0700
Changed HDB stuff in hgLiftOver a bit to reduce database calls. This has not helped speed up the CGI though yet
diff --git src/hg/hgLiftOver/hgLiftOver.c src/hg/hgLiftOver/hgLiftOver.c
index 2189855..117e915 100644
--- src/hg/hgLiftOver/hgLiftOver.c
+++ src/hg/hgLiftOver/hgLiftOver.c
@@ -334,37 +334,40 @@
 void webDownloads()
 {
 webNewSection("Command Line Tool");
 cgiParagraph(
 "To lift genome annotations locally on Linux systems, download the "
 "<A HREF=\"http://hgdownload.cse.ucsc.edu/admin/exe/\">" 
 "<I>liftOver</I></A> executable and the appropriate "
 "<A HREF=\"http://hgdownload.cse.ucsc.edu/downloads.html#liftover\">"
 "chain file</A>."
 " Run <I>liftOver</I> with no arguments to see the usage message.\n");
 }
 
 
 double scoreLiftOverChain(struct liftOverChain *chain,
     char *fromOrg, char *fromDb, char *toOrg, char *toDb,
-    char *cartOrg, char *cartDb, struct hash *dbRank )
+    char *cartOrg, char *cartDb, struct hash *dbRank, 
+    struct hash *dbHash)
 /* Score the chain in terms of best match for cart settings */
 {
 double score = 0;
+struct dbDb *chainFromDbDb = hashFindVal(dbHash, chain->fromDb);
+struct dbDb *chainToDbDb = hashFindVal(dbHash, chain->toDb);
 
-char *chainFromOrg = hArchiveOrganism(chain->fromDb);
-char *chainToOrg = hArchiveOrganism(chain->toDb);
+char *chainFromOrg = (chainFromDbDb) ? chainFromDbDb->organism : NULL;
+char *chainToOrg = (chainToDbDb) ? chainToDbDb->organism : NULL;
 int fromRank = hashIntValDefault(dbRank, chain->fromDb, 0);  /* values up to approx. #assemblies */
 int toRank = hashIntValDefault(dbRank, chain->toDb, 0);
 int maxRank = hashIntVal(dbRank, "maxRank"); 
 
 if (sameOk(fromOrg,chainFromOrg) &&
     sameOk(fromDb,chain->fromDb) && 
     sameOk(toOrg,chainToOrg) &&
     sameOk(toDb,chain->toDb))
     score += 10000000;
 
 if (sameOk(fromOrg,chainFromOrg)) 
     score += 2000000;
 if (sameOk(fromDb,chain->fromDb)) 
     score += 1000000;
 
@@ -386,54 +389,55 @@
 score += 10*(maxRank-fromRank);
 score += (maxRank - toRank);
 
 return score;
 }
 
 
 struct liftOverChain *defaultChoices(struct liftOverChain *chainList,
 				     char *cartDb)
 /* Out of a list of liftOverChains and a cart, choose a
  * list to display. */
 {
 char *fromOrg, *fromDb, *toOrg, *toDb, *cartOrg;
 struct liftOverChain *choice = NULL;  
 struct hash *dbRank = hGetDatabaseRank();
+struct hash *dbDbHash = hDbDbAndArchiveHash();
 double bestScore = -1;
 struct liftOverChain *this = NULL;
 
 /* Get the initial values. */
 fromOrg = cartCgiUsualString(cart, HGLFT_FROMORG_VAR, "0");
 fromDb = cartCgiUsualString(cart, HGLFT_FROMDB_VAR, "0");
 toOrg = cartCgiUsualString(cart, HGLFT_TOORG_VAR, "0");
 toDb = cartCgiUsualString(cart, HGLFT_TODB_VAR, "0");
 cartOrg = hArchiveOrganism(cartDb);
 
 if (sameWord(fromOrg,"0"))
     fromOrg = NULL;
 if (sameWord(fromDb,"0"))
     fromDb = NULL;
 if (sameWord(toOrg,"0"))
     toOrg = NULL;
 if (sameWord(toDb,"0"))
     toDb = NULL;
 if (sameWord(cartDb,"0"))
     cartDb = NULL;
 
 for (this = chainList; this != NULL; this = this->next)
     {
-    double score = scoreLiftOverChain(this, fromOrg, fromDb, toOrg, toDb, cartOrg, cartDb, dbRank);
+    double score = scoreLiftOverChain(this, fromOrg, fromDb, toOrg, toDb, cartOrg, cartDb, dbRank, dbDbHash);
     if (score > bestScore)
 	{
 	choice = this;
 	bestScore = score;
 	}
     }  
 
 return choice;
 }
 
 void doMiddle(struct cart *theCart)
 /* Set up globals and make web page */
 {
 /* struct liftOverChain *chainList = NULL, *chain; */
 char *userData;