boolean anyCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo) /* Get a single cDNA sequence. Optionally (if retInfo is non-null) get additional * info about the sequence. */ { static FILE *cdnaFa; static struct snof *cdnaSnof = NULL; long offset; char *faComment; char **pFaComment = (retInfo == NULL ? NULL : &faComment); if (cdnaSnof == NULL) { char buf[512]; cdnaSnof = snofMustOpen(cdnaName); sprintf(buf, "%s%s", cdnaName, ".fa"); cdnaFa = mustOpen(buf, "rb"); } if (!snofFindOffset(cdnaSnof, name, &offset)) return FALSE; fseek(cdnaFa, offset, SEEK_SET); if (!faReadNext(cdnaFa, name, TRUE, pFaComment, retDna)) return FALSE; if (retInfo != NULL) { /* Kludge - only look up info if format is more or less right. */ int fieldCount = countChars(faComment, '|'); if (fieldCount >= 8) wormFaCommentIntoInfo(faComment, retInfo); else zeroBytes(retInfo, sizeof(*retInfo)); } return TRUE; }
struct xaAli *getOneXaAli(char *organism, char *xaName) /* Return a single named xaAli for organism. */ { char ixFileName[512]; char dataFileName[512]; char *xDir; struct snof *snof; long offset; FILE *f; struct xaAli *xa; xDir = wormXenoDir(); sprintf(ixFileName, "%s%s/all", xDir, organism); sprintf(dataFileName, "%s%s/all%s", xDir, organism, xaAlignSuffix()); snof = snofMustOpen(ixFileName); if (!snofFindOffset(snof, xaName, &offset)) errAbort("Couldn't find %s", xaName); snofClose(&snof); f = xaOpenVerify(dataFileName); fseek(f, offset, SEEK_SET); xa = xaReadNext(f, FALSE); fclose(f); return xa; }
struct cdaAli *wormCdaAli(char *name) /* Return named cDNA alignment or NULL if it doesn't exist. */ { long offset; wormOpenAliSnof(); if (!snofFindOffset(aliSnof, name, &offset)) return NULL; fseek(aliFile, offset, SEEK_SET); return cdaLoadOne(aliFile); }
struct gdfGene *wormGetSomeGdfGene(char *name, struct wormGdfCache *cache) /* Get a single gdfGene of given name. */ { long offset; wormCacheSomeGdf(cache); if (!snofFindOffset(cache->snof, name, &offset) ) return NULL; fseek(cache->file, offset, SEEK_SET); return gdfReadOneGene(cache->file); }
boolean wormCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo) /* Get a single worm cDNA sequence. Optionally (if retInfo is non-null) get additional * info about the sequence. */ { long offset; char *faComment; char **pFaComment = (retInfo == NULL ? NULL : &faComment); wormCdnaCache(); if (!snofFindOffset(cdnaSnof, name, &offset)) return FALSE; fseek(cdnaFa, offset, SEEK_SET); if (!faReadNext(cdnaFa, name, TRUE, pFaComment, retDna)) return FALSE; wormFaCommentIntoInfo(faComment, retInfo); return TRUE; }
boolean wormCdnaInfo(char *name, struct wormCdnaInfo *retInfo) /* Get info about cDNA sequence. */ { char commentBuf[512]; char *comment; long offset; wormCdnaCache(); if (!snofFindOffset(cdnaSnof, name, &offset)) return FALSE; fseek(cdnaFa, offset, SEEK_SET); mustGetLine(cdnaFa, commentBuf, sizeof(commentBuf)); if (commentBuf[0] != '>') errAbort("Expecting line starting with > in cDNA fa file.\nGot %s", commentBuf); comment = cloneString(commentBuf); wormFaCommentIntoInfo(comment, retInfo); return TRUE; }
boolean flyCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo) /* Get a single fly cDNA sequence. Optionally (if retInfo is non-null) get additional * info about the sequence. */ { long offset; char *faComment; char **pFaComment = (retInfo == NULL ? NULL : &faComment); static struct snof *cdnaSnof = NULL; static FILE *cdnaFa; if (cdnaSnof == NULL) cdnaSnof = snofMustOpen("c:/biodata/fly/cDna/allcdna"); if (cdnaFa == NULL) cdnaFa = mustOpen("c:/biodata/fly/cDna/allcdna.fa", "rb"); if (!snofFindOffset(cdnaSnof, name, &offset)) return FALSE; fseek(cdnaFa, offset, SEEK_SET); if (!faReadNext(cdnaFa, name, TRUE, pFaComment, retDna)) return FALSE; flyFaCommentIntoInfo(faComment, retInfo); return TRUE; }
boolean wormGeneRange(char *name, char **retChrom, char *retStrand, int *retStart, int *retEnd) /* Return chromosome position of a chrom range, gene, ORF, cosmid, or nameless cluster. */ { static struct snof *c2gSnof = NULL, *c2cSnof = NULL; static FILE *c2gFile = NULL, *c2cFile = NULL; long offset; char fileName[512]; struct slName *syn = NULL; boolean ok; if (wormIsChromRange(name)) { *retStrand = '.'; return wormParseChromRange(name, retChrom, retStart, retEnd); } getDirs(); /* Translate biologist type name to cosmid.N name */ if (wormIsGeneName(name)) { syn = wormGeneToOrfNames(name); if (syn != NULL) { name = syn->name; } } if (wormFixupOrfName(name)) /* See if ORF, and if so make nice. */ { if (c2gSnof == NULL) { sprintf(fileName, "%sc2g", featDir); c2gSnof = snofMustOpen(fileName); sprintf(fileName, "%sc2g", featDir); c2gFile = mustOpen(fileName, "rb"); } ok = findAltSpliceRange(name, c2gSnof, c2gFile, retChrom, retStart, retEnd, retStrand); } else /* Lets say it's a cosmid. */ { char lineBuf[128]; char *words[3]; int wordCount; touppers(name); if (c2cSnof == NULL) { sprintf(fileName, "%sc2c", featDir); c2cSnof = snofMustOpen(fileName); sprintf(fileName, "%sc2c", featDir); c2cFile = mustOpen(fileName, "rb"); } if (!snofFindOffset(c2cSnof, name, &offset) ) return FALSE; fseek(c2cFile, offset, SEEK_SET); mustGetLine(c2cFile, lineBuf, sizeof(lineBuf)); wordCount = chopLine(lineBuf, words); assert(wordCount == 3); assert(strcmp(words[2], name) == 0); assert(wormIsChromRange(words[0])); *retStrand = words[1][0]; ok = wormParseChromRange(words[0], retChrom, retStart, retEnd); } slFreeList(&syn); return ok; }