Example #1
0
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;
    }
}