void txOrtho(char *inAgx, char *inChain, char *inNet, char *orthoAgx, char *outEdges) /* txOrtho - Produce list of shared edges between two transcription graphs in two species. */ { /* Load up input and create output file */ struct txGraph *inGraphList = txGraphLoadAll(inAgx); verbose(1, "Loaded %d input graphs in %s\n", slCount(inGraphList), inAgx); struct hash *chainHash = allChainsHash(inChain); verbose(1, "Read %d chains from %s\n", chainHash->elCount, inChain); struct hash *netHash = netToBkHash(inNet); verbose(1, "Read %d nets from %s\n", netHash->elCount, inNet); struct txGraph *orthoGraphList = txGraphLoadAll(orthoAgx); verbose(1, "Loaded %d ortho graphs in %s\n", slCount(orthoGraphList), orthoAgx); struct hash *orthoGraphHash = txgIntoKeeperHash(orthoGraphList); verbose(1, "%d ortho chromosomes/scaffolds\n", orthoGraphHash->elCount); FILE *f = mustOpen(outEdges, "w"); /* Loop through inGraphList. */ struct txGraph *inGraph; for (inGraph = inGraphList; inGraph != NULL; inGraph = inGraph->next) { verbose(2, "Processing %s %s:%d-%d strand %s\n", inGraph->name, inGraph->tName, inGraph->tStart, inGraph->tEnd, inGraph->strand); writeOrthoEdges(inGraph, chainHash, netHash, orthoGraphHash, f); } carefulClose(&f); }
struct chain *chainFromId(int id) /** Return a chain given the id. */ { static struct hash *chainHash = NULL; char key[128]; struct chain *chain = NULL; if(id == 0) return NULL; if(chainHash == NULL) { char *chainFile = optionVal("chainFile", NULL); if(chainFile == NULL) errAbort("orthoSplice::chainFromId() - Can't find file for 'chainFile' parameter"); chainHash = allChainsHash(chainFile); } safef(key, sizeof(key), "%d", id); chain = hashFindVal(chainHash, key); if(chain == NULL && id != 0) warn("Chain not found for id: %d", id); return chain; }