Beispiel #1
0
static void brokenRefPepTblFree(struct brokenRefPepTbl **brpTblPtr)
/* free brokenRefPepTbl */
{
struct brokenRefPepTbl *brpTbl = *brpTblPtr;
/* all dynamic memory is hash localmem */
#ifdef DUMP_HASH_STATS
hashPrintStats(brpTbl->protAccHash, "protAcc", stderr);
hashPrintStats(brpTbl->protFaHash, "protFa", stderr);
#endif
hashFree(&brpTbl->protAccHash);
hashFree(&brpTbl->protFaHash);
freeMem(brpTbl);
*brpTblPtr = NULL;
}
static boolean raRecLoad(struct raInfoTbl *rit, unsigned srcDb, struct lineFile *raLf,
                         unsigned cdnaExtId, unsigned pepExtId)
/* load next ra record */
{
    char *acc, *protAccVer, protAcc[GB_ACC_BUFSZ];
    int ver;
    struct hash *raRec = raNextRecord(raLf);
    if (raRec == NULL)
        return FALSE;
    acc = hashMustFindVal(raRec, "acc");
    ver = sqlSigned((char*)hashMustFindVal(raRec, "ver"));
    raInfoAdd(rit, raRec, acc, ver, "siz", "fao", "fas", cdnaExtId);

    if ((srcDb == GB_REFSEQ) && ((protAccVer = hashFindVal(raRec, "prt")) != NULL))
    {
        if (pepExtId == 0)
            errAbort("%s has protein %s, but no pep.fa file", acc, protAccVer);
        ver = gbSplitAccVer(protAccVer, protAcc);
        raInfoAdd(rit, raRec, protAcc, ver, "prs", "pfo", "pfs", pepExtId);
    }
#ifdef DUMP_HASH_STATS
    hashPrintStats(raRec, "raRec", stderr);
#endif
    hashFree(&raRec);
    return TRUE;
}
Beispiel #3
0
static struct slName *getGenomeDbs(struct gbConf *conf)
/* get list of genome databases from variable names */
{
// build hash of dbs
struct hash *dbSet = hashNew(20);
struct hashCookie cookie = hashFirst(conf->hash);
struct hashEl *hel;
while ((hel = hashNext(&cookie)) != NULL)
    {
    char *prefix = parsePrefix(hel->name);
    if (isGenomeDb(prefix))
        hashStore(dbSet, prefix);
    }

// convert to a list of dbs
struct slName *dbs = NULL;
cookie = hashFirst(dbSet);
while ((hel = hashNext(&cookie)) != NULL)
    slSafeAddHead(&dbs, slNameNew(hel->name));
#ifdef DUMP_HASH_STATS
hashPrintStats(dbSet, "gbConfDbSet", stderr);
#endif
hashFree(&dbSet);
slSort(&dbs, slNameCmp);
return dbs;
}
Beispiel #4
0
struct sqlDeleter *gbBuildStateReloadDeleter(struct sqlConnection *conn,
                                             struct gbSelect* select,
                                             char *tmpDirPath)
/* get deleter for list of accessions to reload for the selected categories.
 * Used when reloading. Returns null if none found */
{
struct hash* seqTblAccs;
struct slName *gbStatAccs, *acc;
struct hashCookie cookie;
struct hashEl *hel;
struct sqlDeleter* deleter;
unsigned cnt = 0;
unsigned statTblSelect = select->release->srcDb | select->orgCats | select->type;

/* ESTs not implemented, which gets rid of complexities of accPrefix */
if (select->type & GB_EST)
    errAbort("gbBuildStateReloadDeleter doesn't handle ESTs");

seqTblAccs = seqTblLoadAcc(conn, select);
gbStatAccs = gbStatusTblLoadAcc(conn,  statTblSelect,  NULL);

/* build up deleter combining the two */
deleter = sqlDeleterNew(tmpDirPath, (gbVerbose >= 4));

cookie = hashFirst(seqTblAccs);
while ((hel = hashNext(&cookie)) != NULL)
    {
    sqlDeleterAddAcc(deleter, hel->name);
    cnt++;
    }

for (acc = gbStatAccs; acc != NULL; acc = acc->next)
    {
    if (hashLookup(seqTblAccs, acc->name) == NULL)
        {
        sqlDeleterAddAcc(deleter, acc->name);
        cnt++;
        }
    }

#ifdef DUMP_HASH_STATS
hashPrintStats(seqTblAccs, "seqTblAccs", stderr);
#endif
hashFree(&seqTblAccs);
slFreeList(&gbStatAccs);
if (cnt == 0)
    sqlDeleterFree(&deleter);

return deleter;
}
Beispiel #5
0
void gbIgnoreFree(struct gbIgnore** ignorePtr)
/* Free gbIgnore object */
{
struct gbIgnore* ignore = *ignorePtr;
if (ignore != NULL)
    {
#ifdef DUMP_HASH_STATS
    if (ignore->accHash != NULL)
        hashPrintStats(ignore->accHash, "ignoreAcc", stderr);
#endif
    hashFree(&ignore->accHash);
    freeMem(ignore);
    *ignorePtr = NULL;
    }
}
Beispiel #6
0
struct gbStatusTbl* gbBuildState(struct sqlConnection *conn,
                                 struct gbSelect* select, 
                                 struct dbLoadOptions* options,
                                 float maxShrinkage,
                                 char* tmpDir,
                                 int verboseLevel,
                                 boolean extFileUpdate,
                                 boolean* maxShrinkageExceeded)
/* Load status table and find of state of all genbank entries in the release
 * compared to the database. */
{
struct gbStatusTbl* statusTbl;
struct selectStatusData ssData;
unsigned selectFlags = (select->type | select->release->srcDb);
ZeroVar(&ssData);

gOptions = options;
*maxShrinkageExceeded = FALSE;
gbVerbose = verboseLevel;
gErrorCnt = 0;

loadNonCoding = dbLoadNonCoding(sqlGetDatabase(conn), select);
if (loadNonCoding)
    gbVerbMsg(1, "NOTE: loading non-coding");

gbVerbEnter(3, "build state table");
gbVerbMsg(4, "reading gbSeq accessions");
ssData.select = select;
ssData.seqHash = seqTblLoadAcc(conn, select);

gbVerbMsg(4, "reading gbStatus");
statusTbl = gbStatusTblSelectLoad(conn, selectFlags, select->accPrefix,
                                  selectStatus, &ssData,
                                  tmpDir, extFileUpdate, (gbVerbose >= 4));
findNewEntries(select, statusTbl);

/* Don't allow deletes when select criteria has changed */
if ((ssData.orgCatDelCnt > 0) && !(gOptions->flags & DBLOAD_LARGE_DELETES))
    errAbort("%u entries deleted due to organism category no longer being selected, specify -allowLargeDeletes to override",
             ssData.orgCatDelCnt);

/* check shrinkage unless override */
if ((gOptions->flags & DBLOAD_LARGE_DELETES) == 0)
    {
    if (!checkShrinkage(select, maxShrinkage, statusTbl))
        *maxShrinkageExceeded = TRUE;
    }

/* don't do other setup if we are going to stop on maxShrinkageExceeded */
if (!*maxShrinkageExceeded)
    {
    gbVerbMsg(4, "checking for orphans");
    findOrphans(conn, select, ssData.seqHash, statusTbl);

    if (((gOptions->flags & DBLOAD_INITIAL) == 0))
        {
        gbVerbMsg(4, "checking for type change");
        checkForTypeChange(conn, select, statusTbl);
        }
    }

#ifdef DUMP_HASH_STATS
hashPrintStats(ssData.seqHash, "stateSeq", stderr);
#endif
hashFree(&ssData.seqHash);

gbVerbLeave(3, "build state table");

/* always print stats */
fprintf(stderr, "gbLoadRna: selected %s: delete=%u seqChg=%u metaChg=%u extChg=%u new=%u orphan=%u derived=%u noChg=%u\n",
        gbSelectDesc(select), statusTbl->numDelete, statusTbl->numSeqChg,
        statusTbl->numMetaChg, statusTbl->numExtChg, statusTbl->numNew,
        statusTbl->numOrphan, statusTbl->numRebuildDerived, 
        statusTbl->numNoChg);

/* this doesn't include large delete errors */
if (gErrorCnt > 0)
    errAbort("Errors detecting when constructing state table");
return statusTbl;
}