static void makeOligoHistogram(char *fileName, struct seqList *seqList, int oligoSize, int **retTable, int *retTotal) /* Make up table of oligo occurences. Either pass in an FA file or a seqList. * (the other should be NULL). */ { FILE *f = NULL; int tableSize = (1<<(oligoSize+oligoSize)); int tableByteSize = tableSize * sizeof(int); int *table = needLargeMem(tableByteSize); struct dnaSeq *seq; struct seqList *seqEl = seqList; int *softMask = NULL; int total = 0; if (seqList == NULL) f = mustOpen(fileName, "rb"); memset(table, 0, tableByteSize); for (;;) { DNA *dna; int size; int endIx; int i; int oliVal; if (seqList != NULL) { if (seqEl == NULL) break; seq = seqEl->seq; softMask = seqEl->softMask; seqEl = seqEl->next; } else { seq = faReadOneDnaSeq(f, "", TRUE); if (seq == NULL) break; } dna = seq->dna; size = seq->size; endIx = size-oligoSize; for (i=0; i<=endIx; ++i) { if (softMask == NULL || !masked(softMask+i, oligoSize) ) { if ((oliVal = oligoVal(dna+i, oligoSize)) >= 0) { table[oliVal] += 1; ++total; } } } if (seqList == NULL) freeDnaSeq(&seq); } carefulClose(&f); *retTable = table; *retTotal = total; }
struct dnaSeq *nextWormCdna(struct wormCdnaIterator *it) /* Return next sequence in database */ { return faReadOneDnaSeq(it->faFile, "unknown", TRUE); }