void wormFreeNt4Genome(struct nt4Seq ***pNt4Seq) /* Free up packed worm genome. */ { struct nt4Seq **seqs; int i; if ((seqs = *pNt4Seq) == NULL) return; for (i=0; i<ArraySize(chromIds); ++i) freeNt4(&seqs[i]); freez(pNt4Seq); }
void freeGenome(struct nt4Seq ***pNt4Seq, char ***pChromNames, int chromCount) /* Free up genome. */ { int i; struct nt4Seq **nt4s = *pNt4Seq; for (i=0; i<chromCount; ++i) { freeNt4(&nt4s[i]); } freez(pNt4Seq); freez(pChromNames); }
void flyFreeNt4Genome(struct nt4Seq ***pNt4Seq) /* Free up packed fly genome. */ { struct nt4Seq **pSeq; int i; if ((pSeq = *pNt4Seq) == NULL) return; for (i=0; i<ArraySize(ntFileNames); ++i) freeNt4(&pSeq[i]); freez(pNt4Seq); }
void firstPass(char *aList, char *bList, char *outName) /* Do first pass - find areas of homology between a and b, * save to outName. */ { char *aNameBuf, **aNames; char *bNameBuf, **bNames; int aCount, bCount; struct nt4Seq **bNts, *bNt, *bNtList = NULL; int bNtCount; int i; FILE *out = mustOpen(outName, "w"); /* Read in fa file lists . */ readAllWordsOrFa(aList, &aNames, &aCount, &aNameBuf); readAllWordsOrFa(bList, &bNames, &bCount, &bNameBuf); /* Convert second list to nt4 (packed) format in memory. */ printf("Loading and packing dna in %s\n", bList); for (i=0; i<bCount; ++i) { char *bName = bNames[i]; struct dnaSeq *seqList, *seq; seqList = faReadAllDna(bName); for (seq = seqList; seq != NULL; seq = seq->next) { char uniqName[512]; sprintf(uniqName, "%s@%s", seq->name, bName); bNt = newNt4(seq->dna, seq->size, uniqName); slAddHead(&bNtList, bNt); } freeDnaSeqList(&seqList); } slReverse(&bNtList); bNtCount = slCount(bNtList); AllocArray(bNts, bNtCount); for (i=0, bNt=bNtList; i<bNtCount; ++i, bNt=bNt->next) bNts[i] = bNt; printf("Loaded %d contigs from %d files\n", bNtCount, bCount); /* Align elements of A list one at a time against B list. */ for (i=0; i<aCount; ++i) { char *aName = aNames[i]; struct dnaSeq *seqList, *seq; printf("Aligning %s against %s\n", aName, bList); seqList = faReadAllDna(aName); for (seq = seqList; seq != NULL; seq = seq->next) { doCrude(aName, seq, bNts, bNtCount, out); } printf("\n"); freeDnaSeqList(&seqList); } /* Cleanup time. */ for (i=0; i<bNtCount; ++i) freeNt4(&bNts[i]); freeMem(bNts); freeMem(aNames); freeMem(bNames); freeMem(aNameBuf); freeMem(bNameBuf); fclose(out); }