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 "
""
"liftOver executable and the appropriate "
""
"chain file."
" Run liftOver 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;