static void dumpGeneInfo(char *desc, struct orgGenes *orgs) /* dump information about genes */ { FILE *fh = verboseLogFile(); int i; struct orgGenes *genes; struct gene *gene; for (genes = orgs; genes != NULL; genes = genes->next) { fprintf(fh, "srcDb: %s\n", genes->srcDb); for (gene = genes->genes; gene != NULL; gene = gene->next) { geneSortFramesOffTarget(gene); fprintf(fh, "%s: ", desc); geneDump(fh, gene); } for (i = 0; i < 90; i++) fputc('-', fh); fputc('\n', fh); } }
static void splitMultAlign(struct gene *gene, struct gene **geneRestRet) /* Split based on portions of a gene being aligned multiple times. Opposite * strand alignments must have been processed first. */ { struct exonFrames *ef; /* algorithm requires sorting by offset in gene */ geneSortFramesOffTarget(gene); /* Check each exonFrame to see if the next one overlaps in gene, goes * backwards in target space, or results in an absurdly large exon. If so, * find the best continuation of this frame and move all intervening ones to * the new gene */ for (ef = geneFirstExonFrames(gene); ef != NULL;) { struct exonFrames *nextEf = exonFramesNext(ef); if (isNextConflicting(ef, nextEf)) ef = splitConflicting(ef, geneRestRet); else ef = nextEf; } }